Spring Cloud是当前炙手可热的微服务开发框架。它的功能强大,组件丰富,设计优雅。目前Spring Cloud还在不断发展之中。

Spring Cloud即将发布 SpringCloudEdgware 版本。该版本解决了不少Bug,新增了不少新特性,本系列将为大家详细阐述在Spring Cloud Edgware中新增的特性。

 

Eureka服务器与客户端之间默认使用 Jersey1.x 进行基于HTTP协议的交互。但是如果需要使用docker-client (https://github.com/docker-java/docker-java) 。这货只支持 Jersey2.x ,而Jersey 1.x与2.x并不兼容。

 

于是,我们面临如下几种选择:

  • 使用Eureka提供的 eureka-client-jersey2 模块,即使用 Jersey2.x 来代替 Jersey1.x https://github.com/Netflix/eureka/tree/master/eureka-client-jersey2。然而,这种方式不够稳妥,原因是 eureka-client-jersey2 是由社区提供,并非由Eureka官方团队维护,并且已经很久不更新了。
  • 放弃使用 docker-client ,使用其他的Docker客户端,例如https://github.com/spotify/docker-client (该项目支持Jersey 1.x以及Jersey 2.x)。
  • 升级 SpringCloudNetflix 到1.4.x,即: SpringCloudEdgware 【笔者认为的最佳方案】。

 

废弃Eureka Client的Jersey

SpringCloudEdgware 中,Jersey并非必选。可为Eureka Client禁用掉Jersey,转而使用我们想要的HTTP客户端,例如RestTemplate。只需将Jersey的包从依赖中删除,Spring Cloud就会自动配置一个基于 SpringRestTemplate 的传输客户端。操作如下:

收益

简单的操作后,有两个好处:

  • 再也不用烦Jersery的版本冲突问题
  • 依赖减少了一些。

原理及代码

详见:https://github.com/spring-cloud/spring-cloud-netflix/issues/1849 。简单来说,就是Eureka提供了一个抽象,允许用户为Eureka Client定制自己的HTTP客户端,而不像老版本,强制使用Jersery。

 

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注