3.客户端负载平衡器:Ribbon

客户端负载均衡器控制HTTP和TCP客户端。Feign用Ribbon,用@FeignClient适用。

中心概念:指定客户端的概念。每个负载平衡器是组合的组合的一部分,一起工作,根据需要联系远程服务器,@FeignClient注释,RibbonClientConfiguration为每个命名客户端创建新合奏作为ApplicationContext。包含ILoadBalancer,RestClient和ServerListFilter

一、如何加入Ribbon

org.springframework.cloud和工件ID spring-cloud-starter-ribbon

二、自定义Ribbon客户端

.ribbon.*中外部属性配置Ribbon客户端的某些,与Netflix API相同,用Spring Boot配置文件。本机选项可在CommonClientConfigKey(功能区内核心部分)中作为静态字段检查

@RibbonClient声明其他配置(RibbonClientConfiguration之上)完全控制客户端。例:

客户端由RibbonClientConfiguration中已经存在的组件与FooConfiguration中任何组件组成(后通常覆盖前)。

FooConfiguration必须是@Configuration不在主应用程序上下文@ComponentScan中,否则将由@RibbonClients共享。

如用@ComponentScan(或@SpringBootApplication),需采取措施避免包含(例如将其放在一个单独的,不重叠的包中,或者指定要在@ComponentScan)。

Spring Cloud Netflix默认Ribbon(BeanType beanName:ClassName)提供以下bean:

IClientConfig ribbonClientConfig:DefaultClientConfigImpl

IRule ribbonRule:ZoneAvoidanceRule

IPing ribbonPing:NoOpPing

ServerList ribbonServerList:ConfigurationBasedServerList

ServerListFilter ribbonServerListFilter:ZonePreferenceServerListFilter

ILoadBalancer ribbonLoadBalancer:ZoneAwareLoadBalancer

ServerListUpdater ribbonServerListUpdater:PollingServerListUpdater

创建一个类型bean并将其放置@RibbonClient配置(如上面FooConfiguration中)允许覆盖所描述每个bean。

3.客户端负载平衡器:Ribbon_第1张图片

PingUrl代替NoOpPing

三、使用属性自定义Ribbon客户端

Spring Cloud Netflix支持使用属性与Ribbon文档兼容来自定义Ribbon客户端。

不同环境中更改启动时的行为。.ribbon.为前缀:

NFLoadBalancerClassName:应实施ILoadBalancer

NFLoadBalancerRuleClassName:应实施IRule

NFLoadBalancerPingClassName:应实施IPing

NIWSServerListClassName:应实施ServerList

NIWSServerListFilterClassName应实施ServerListFilter

属性中定义类优先于使用@RibbonClient(configuration=MyRibbonConfig.class)定义的bean和由Spring Cloud Netflix提供的默认值。

设置服务名称users的IRule,您可以设置以下内容:

application.yml

有关Ribbon提供的实现,请参阅Ribbon文档。

四、在Eureka中使用Ribbon

ribbonServerList扩展为DiscoveryEnabledNIWSServerList,扩展名Eureka服务器列表。用NIWSDiscoveryPing替换IPing接口,代理Eureka确定服务器是否启动。默认安装的ServerList是一个DomainExtractingServerList,使物理元数据可用于负载平衡器,不使用AWS AMI元数据(Netflix依赖)。

服务器列表默认用实例元数据(如远程客户端集合eureka.instance.metadataMap.zone)中提供的“区域”信息构建,如缺少,则可用服务器主机名中的域名作为代理用于区域(如果设置了标志approximateZoneFromHostname)。区域信息可用,可在ServerListFilter中使用。

定位客户端相同区域服务器,默认值ZonePreferenceServerListFilter。客户端与远程方式相同eureka.instance.metadataMap.zone

ps1:设置客户端区域的正统“archaius”方式是通过一个名为“@zone”的配置属性,如可用,Spring Cloud优先用所有其他设置(该键必须被引用)YAML配置中)。

ps2:如没有其他区域数据源,则基于客户端配置(与实例配置相反)进行猜测。我们将eureka.client.availabilityZones(从区域名称映射到区域列表),并将实例自己的区域的第一个区域(即eureka.client.region,其默认为“us-east-1”为与本机Netflix的兼容性)。

五、示例:如何使用Ribbon不使用Eureka

方便抽象远程服务器发现不必在客户端中对URL硬编码,不想使用它,Ribbon和Feign仍适用。假设已经为“商店”申请@RibbonClient,Eureka未被使用(甚至不在类路径上)。Ribbon客户端默认为已配置的服务器列表

3.客户端负载平衡器:Ribbon_第2张图片
application.yml

六、示例:在Ribbon中禁用Eureka使用

ribbon.eureka.enabled = false

3.客户端负载平衡器:Ribbon_第3张图片
application.yml

七、直接使用Ribbon API

您也可以直接使用LoadBalancerClient。例:

3.客户端负载平衡器:Ribbon_第4张图片

八、缓存Ribbon配置

Ribbon命名客户端都有相应子应用程序上下文,Spring Cloud维护,上下文第一个请求中被延迟加载到命名的客户端。通过指定Ribbon客户端名称,启动更改延迟加载饥饿加载上下文

application.yml

ribbon:

  eager-load:

    enabled: true

    clients: client1, client2, client3

你可能感兴趣的:(3.客户端负载平衡器:Ribbon)