据我了解@LoadBalanced,Rest模板应基于使用Ribbon的客户端负载平衡,并检查Eureka服务器是否将服务名称解析为主机/端口。
@LoadBalanced
的用途是什么@RibbonClient。它配置为支持不带Eureka的本机Ribbon Client LB以及配置为Eureka Discover时是否还支持DiscoveryEnabledNIWSServerList?
@RibbonClient
DiscoveryEnabledNIWSServerList
TL; DR :@LoadBalanced是标记注释,@RibbonClient用于配置目的。
用作标记注释,指示被注释的对象RestTemplate应使用RibbonLoadBalancerClient与您的服务进行交互。
RestTemplate
RibbonLoadBalancerClient
反过来,这允许您对传递给的网址使用“逻辑标识符” RestTemplate。这些逻辑标识符通常是服务的名称。例如:
restTemplate.getForObject("http://some-service-name/user/{id}", String.class, 1);
some-service-name逻辑标识符在哪里。
some-service-name
用于配置功能区客户端。
是否需要@RibbonClient?
没有!如果您正在使用服务发现,并且对所有默认的功能区设置都没问题,那么甚至不需要使用@RibbonClient注释。
我@RibbonClient什么时候应该使用?
至少有两种情况需要使用 @RibbonClient
自定义功能区设置:
定义一个 @RibbonClient
@RibbonClient(name = "some-service", configuration = SomeServiceConfig.class)
name
configuration
@Configuration
@Beans
@ComponentScan
请参阅Spring Cloud Netflix文档中的“自定义RibbonClient”部分(链接)
在不进行服务发现的情况下使用功能区
如果您未使用Service Discovery,则注释name字段@RibbonClient将用于application.properties在您传递给的URL 中的前缀以及“逻辑标识符”中为您的配置添加前缀RestTemplate。
application.properties
@RibbonClient(name = "myservice")
然后在你的 application.properties
myservice.ribbon.eureka.enabled=false myservice.ribbon.listOfServers=http://localhost:5000, http://localhost:5001