Spring Cloud Edgware新特性之一:解決Eureka中Jersey 1.x版本過舊的問題-不使用Jersey

Spring Cloud是當前煊赫一時的微服務開發框架。它的功能強大,組件豐富,設計優雅。目前Spring Cloud還在不斷髮展之中。java

Spring Cloud即將發佈Spring Cloud Edgware 版本。該版本解決了很多Bug,新增了很多新特性,本系列博客將爲你們詳細闡述在Spring Cloud Edgware中新增的特性。git

爲了讓描述更加的貼合實際,本文將結合筆者所在團隊遇到的實際狀況進行講解。github

背景

Eureka服務器與客戶端之間默認使用Jersey 1.x 進行基於HTTP協議的交互。然而咱們團隊,需使用docker-client (https://github.com/docker-java/docker-java) 。這貨只支持Jersey 2.x ,而Jersey 1.x與2.x並不兼容。spring

尋求方案

因而,咱們團隊面臨以下幾種選擇:docker

  • 使用Eureka提供的eureka-client-jersey2 模塊,即便用Jersey 2.x 來代替Jersey 1.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)。
  • 升級Spring Cloud Netflix 到1.4.x,即:Spring Cloud Edgware 【筆者認爲的最佳方案】。

本文探討的就是在Spring Cloud Edgware 中Eureka的點點滴滴。apache

廢棄Eureka Client的Jersey

Spring Cloud Edgware 中,Jersey並不是必選。可爲Eureka Client禁用掉Jersey,轉而使用咱們想要的HTTP客戶端,例如RestTemplate。只需將Jersey的包從依賴中刪除,Spring Cloud就會自動配置一個基於Spring RestTemplate 的傳輸客戶端。操做以下:服務器

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-apache-client4</artifactId>
        </exclusion>
    </exclusions>
</dependency>

收益

簡單的操做後,有兩個好處:框架

  • 不再用煩Jersery的版本衝突問題
  • 依賴減小了一些。

原理及代碼

詳見:https://github.com/spring-cloud/spring-cloud-netflix/issues/1849 。簡單來講,就是Eureka提供了一個抽象,容許用戶爲Eureka Client定製本身的HTTP客戶端,而不像老版本,強制使用Jersery。微服務

相關文章
相關標籤/搜索