Spring Cloud - Ribbon客户端的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud - Ribbon客户端的使用相关的知识,希望对你有一定的参考价值。
从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文档兼容来自定义Ribbon客户端。
这允许您在不同环境中更改启动时的行为。
支持的属性如下所示,应以<clientName>.ribbon.
为前缀:
-
NFLoadBalancerClassName
:应实施ILoadBalancer
-
NFLoadBalancerRuleClassName
:应实施IRule
-
NFLoadBalancerPingClassName
:应实施IPing
-
NIWSServerListClassName
:应实施ServerList
-
NIWSServerListFilterClassName
应实施ServerListFilter
要设置服务名称
users
的IRule
,您可以设置以下内容:application.ymlusers: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
当Eureka与Ribbon结合使用(即两者都在类路径上)时,
ribbonServerList
将被扩展为DiscoveryEnabledNIWSServerList
,扩展名为Eureka的服务器列表。它还用NIWSDiscoveryPing
替换IPing
接口,代理到Eureka以确定服务器是否启动。默认情况下安装的ServerList
是一个DomainExtractingServerList
,其目的是使物理元数据可用于负载平衡器,而不使用AWS AMI元数据(这是Netflix依赖的)。默认情况下,服务器列表将使用实例元数据(如远程客户端集合eureka.instance.metadataMap.zone
)中提供的“区域”信息构建,如果缺少,则可以使用服务器主机名中的域名作为代理用于区域(如果设置了标志approximateZoneFromHostname
)。一旦区域信息可用,它可以在ServerListFilter
中使用。默认情况下,它将用于定位与客户端相同区域的服务器,因为默认值为ZonePreferenceServerListFilter
。默认情况下,客户端的区域与远程实例的方式相同,即通过eureka.instance.metadataMap.zone
。Eureka是一种方便的方式来抽象远程服务器的发现,因此您不必在客户端中对其URL进行硬编码,但如果您不想使用它,Ribbon和Feign仍然是适用的。假设您已经为“商店”申请了
@RibbonClient
,并且Eureka未被使用(甚至不在类路径上)。Ribbon客户端默认为已配置的服务器列表,您可以提供这样的配置application.ymlstores: ribbon: listOfServers: example.com,google.com
设置属性
ribbon.eureka.enabled = false
将明确禁用在Ribbon中使用Eureka。application.ymlribbon: eureka: enabled: false
直接使用Ribbon API
您也可以直接使用
LoadBalancerClient
。例:public class MyClass { @Autowired private LoadBalancerClient loadBalancer; public void doStuff() { ServiceInstance instance = loadBalancer.choose("stores"); URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort())); // ... do something with the URI } }
以上是关于Spring Cloud - Ribbon客户端的使用的主要内容,如果未能解决你的问题,请参考以下文章
spring-cloud-starter-ribbon提供客户端的软件负载均衡算法
Spring Cloud 入门教程: Ribbon实现客户端的负载均衡