2015-07-21 88 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和其他人提供支持时不能在框架内做到这一点。至少,只有那些知道自己在做什么并会让整个社区受益的人才会这样做。

让功能区退出游戏还可确保功能区组件在构建不需要它们的应用程序时不会被“初始化”。