Spring cloud “为什么?”;春云起动器“尤里卡”;拉;春季云启动程序彩带“;?

Spring cloud “为什么?”;春云起动器“尤里卡”;拉;春季云启动程序彩带“;?,spring-cloud,Spring Cloud,为什么springcloudstartereureka将springcloudstarterribbon作为可传递依赖项 我的意思是,Eureka根本不需要Ribbon-然而,情况可能恰恰相反(Ribbon可能需要Eureka,具体取决于其配置) 我们有一系列的服务,只需要在Eureka注册,而不需要联系其他服务。游戏中没有Ribbon直接和可传递的依赖项将有助于减少最终工件的大小。如果没有,您还需要一个spring cloud starter Ribbon eureka。我们想表现得固执己见,

为什么
springcloudstartereureka
springcloudstarterribbon
作为可传递依赖项

我的意思是,Eureka根本不需要Ribbon-然而,情况可能恰恰相反(Ribbon可能需要Eureka,具体取决于其配置)


我们有一系列的服务,只需要在Eureka注册,而不需要联系其他服务。游戏中没有Ribbon直接和可传递的依赖项将有助于减少最终工件的大小。

如果没有,您还需要一个
spring cloud starter Ribbon eureka
。我们想表现得固执己见,所以
springcloudstartereureka
包括
springcloudstarterribbon
com.netflix.ribbon:ribbon eureka
。如果您想减小大小,一个简单的
就可以做到这一点。

为了摆脱Ribbon及其可传递的依赖关系,可以在其
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>

org.springframework.cloud
春云起动器尤里卡
org.springframework.cloud
春云起动带
com.netflix.ribbon
丝带尤里卡
com.netflix.ribbon
带芯
com.netflix.ribbon
带状负载平衡器
最后,这将从最终工件中删除大约3Mb的依赖项

它远不止是简单地排除单个依赖项,比如
springcloudstarter功能区
,它还需要对springcloudnetflix库的内部结构有更深入的了解,以发现哪些依赖项可以被删除

@斯宾塞·吉布:我理解你的观点,但如果让用户自己做这件事“那么容易”,我不明白你为什么不能在框架内为Concur和其他人构建支持。至少,只有那些知道自己在做什么并且对整个社区都有好处的人才会这样做一次


将Ribbon移出游戏也可以确保在构建不需要的应用程序时,Ribbon组件不会被“免费”初始化。

我理解,但这可能是相反的:
spring cloud starter eureka
仅支持eureka,而
spring cloud starter Ribbon
支持所有功能区,包括Ribbon Eureka支持。它将提供更大的灵活性,因为人们更可能在没有Ribbon的情况下使用Eureka,而不是在没有Eureka的情况下使用Ribbon(大多数“独立”服务只需要在Eureka注册)。这不仅减少了应用程序的大小,而且还带来了潜在的问题。在类路径上有多余的无用库可能会触发自动配置,这可能会干扰应用程序的其余部分。我不会做相反的事情,我需要一个没有eureka的ribbon来实现其他发现(Consor、zookeeper等)。做一件事有什么大不了的吗?