@RibbonClient和@LoadBalanced之间的区别

问题描述

@LoadBalanced标记注释,@RibbonClient用于配置目的。


@LoadBalanced

用作标记注释,指示被注释的对象RestTemplate应使用RibbonLoadBalancerClient与您的服务进行交互。

反过来,这允许您对传递给的网址使用“逻辑标识符” RestTemplate。这些逻辑标识符通常是服务的名称。例如:

restTemplate.getForObject("http://some-service-name/user/{id}", String.class, 1);

some-service-name逻辑标识符在哪里。

@RibbonClient

用于配置功能区客户端。

没有!如果您正在使用服务发现,并且对所有默认的功能区设置都没问题,那么甚至不需要使用@RibbonClient注释。

至少有两种情况需要使用 @RibbonClient

  1. 您需要为特定的功能区客户端自定义功能区设置
  2. 您没有使用任何服务发现

定义一个 @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

定义一个 @RibbonClient

@RibbonClient(name = "myservice")

然后在你的 application.properties

myservice.ribbon.eureka.enabled=false
myservice.ribbon.listOfServers=http://localhost:5000, http://localhost:5001

解决方法

据我了解@LoadBalanced,Rest模板应基于使用Ribbon的客户端负载平衡,并检查Eureka服务器是否将服务名称解析为主机/端口。

的用途是什么@RibbonClient。它配置为支持不带Eureka的本机Ribbon Client LB以及配置为Eureka
Discover时是否还支持DiscoveryEnabledNIWSServerList

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”