2015-07-21 81 views
1

爲什麼spring-cloud-starter-eurekaspring-cloud-starter-ribbon作爲傳遞依賴?爲什麼「spring-cloud-starter-eureka」拉動「spring-cloud-starter-ribbon」?

我的意思是,尤里卡根本不需要色帶 - 但是,相反可能是真的(色帶可能需要尤里卡取決於其配置)。

我們確實收集了一些服務,只需要向Eureka註冊,但不需要聯繫其他服務。在遊戲中沒有Ribbon的直接和傳遞依賴將有助於減少最終工件的大小。

回答

0

如果沒有,您還需要spring-cloud-starter-ribbon-eureka。我們想要自以爲是,所以spring-cloud-starter-eureka包括spring-cloud-starter-ribboncom.netflix.ribbon:ribbon-eureka。如果你想減小尺寸,一個簡單的<exclude>將做到這一點。

+0

我明白了,但它可能已經被顛倒過來了:只有Eureka支持的'spring-cloud-starter-eureka'和帶有所有Ribbon功能的'spring-cloud-starter-ribbon',包括Ribbon-Eureka支持。 這將提供更大的靈活性,因爲人們更有可能使用沒有功能區的Eureka,而不是使用尤里卡的功能區(大多數「獨立」服務僅需要向Eureka註冊)。 這不僅減少了應用程序的大小,而且還減少了潛在的問題。在類路徑上額外使用無用的庫可能會觸發可能會干擾其他應用程序的自動配置。 –

+0

我不會做相反的事情,我需要絲帶沒有尤里卡其他實現發現(領事,動物園管理員等)。排除一個是否是一件大事? – spencergibb

1

爲了擺脫絲帶和傳遞依賴的,一會加在其pom.xml如下:

<dependency> 
     <groupId>org.springframework.cloud</groupId> 
     <artifactId>spring-cloud-starter-eureka</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.cloud</groupId> 
       <artifactId>spring-cloud-starter-ribbon</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.netflix.ribbon</groupId> 
       <artifactId>ribbon-eureka</artifactId> 
      </exclusion> 

      <!-- Eureka needs com.netflix.http4.MonitoredConnectionManager 
       so don't exclude this dependency 
      <exclusion> 
       <artifactId>ribbon-httpclient</artifactId> 
       <groupId>com.netflix.ribbon</groupId> 
      </exclusion> 
      --> 
      <exclusion> 
       <groupId>com.netflix.ribbon</groupId> 
       <artifactId>ribbon-core</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>com.netflix.ribbon</groupId> 
       <artifactId>ribbon-loadbalancer</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

最後,這消除關於從最終工件依賴關係的3MB。

這遠遠不僅僅是排除像spring-cloud-starter-ribbon這樣的單一依賴關係,而且它需要更深入的Spring Cloud Netflix庫內部知識來發現哪些依賴關係可以被刪除。

@spencergibb:我理解你的觀點,但如果讓用戶自己去做「這麼簡單」,我不明白爲什麼你在爲Consul和其他人提供支持時不能在框架內做到這一點。至少,只有那些知道自己在做什麼並會讓整個社區受益的人才會這樣做。

讓功能區退出遊戲還可確保功能區組件在構建不需要它們的應用程序時不會被「初始化」。