3.客戶端負(fù)載平衡器:Ribbon

客戶端負(fù)載均衡器控制HTTP和TCP客戶端。Feign用Ribbon,用@FeignClient適用。

中心概念:指定客戶端的概念。每個(gè)負(fù)載平衡器是組合的組合的一部分,一起工作,根據(jù)需要聯(lián)系遠(yuǎn)程服務(wù)器,@FeignClient注釋,RibbonClientConfiguration為每個(gè)命名客戶端創(chuàng)建新合奏作為ApplicationContext。包含ILoadBalancer,RestClient和ServerListFilter。

一、如何加入Ribbon

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

二、自定義Ribbon客戶端

<client>.ribbon.*中外部屬性配置Ribbon客戶端的某些,與Netflix API相同,用Spring Boot配置文件。本機(jī)選項(xiàng)可在CommonClientConfigKey(功能區(qū)內(nèi)核心部分)中作為靜態(tài)字段檢查

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

客戶端由RibbonClientConfiguration中已經(jīng)存在的組件與FooConfiguration中任何組件組成(后通常覆蓋前)。

FooConfiguration必須是@Configuration不在主應(yīng)用程序上下文@ComponentScan中,否則將由@RibbonClients共享。

如用@ComponentScan(或@SpringBootApplication),需采取措施避免包含(例如將其放在一個(gè)單獨(dú)的,不重疊的包中,或者指定要在@ComponentScan)。

Spring Cloud Netflix默認(rèn)Ribbon(BeanType?beanName:ClassName)提供以下bean:

IClientConfig?ribbonClientConfig:DefaultClientConfigImpl

IRule?ribbonRule:ZoneAvoidanceRule

IPing?ribbonPing:NoOpPing

ServerList<Server>?ribbonServerList:ConfigurationBasedServerList

ServerListFilter<Server>?ribbonServerListFilter:ZonePreferenceServerListFilter

ILoadBalancer?ribbonLoadBalancer:ZoneAwareLoadBalancer

ServerListUpdater?ribbonServerListUpdater:PollingServerListUpdater

創(chuàng)建一個(gè)類型bean并將其放置@RibbonClient配置(如上面FooConfiguration中)允許覆蓋所描述每個(gè)bean。

PingUrl代替NoOpPing

三、使用屬性自定義Ribbon客戶端

Spring Cloud Netflix支持使用屬性與Ribbon文檔兼容來(lái)自定義Ribbon客戶端。

不同環(huán)境中更改啟動(dòng)時(shí)的行為。<clientName>.ribbon.為前綴:

NFLoadBalancerClassName:應(yīng)實(shí)施ILoadBalancer

NFLoadBalancerRuleClassName:應(yīng)實(shí)施IRule

NFLoadBalancerPingClassName:應(yīng)實(shí)施IPing

NIWSServerListClassName:應(yīng)實(shí)施ServerList

NIWSServerListFilterClassName應(yīng)實(shí)施ServerListFilter

屬性中定義類優(yōu)先于使用@RibbonClient(configuration=MyRibbonConfig.class)定義的bean和由Spring Cloud Netflix提供的默認(rèn)值。

設(shè)置服務(wù)名稱users的IRule,您可以設(shè)置以下內(nèi)容:

application.yml

有關(guān)Ribbon提供的實(shí)現(xiàn),請(qǐng)參閱Ribbon文檔

四、在Eureka中使用Ribbon

ribbonServerList擴(kuò)展為DiscoveryEnabledNIWSServerList,擴(kuò)展名Eureka服務(wù)器列表。用NIWSDiscoveryPing替換IPing接口,代理Eureka確定服務(wù)器是否啟動(dòng)。默認(rèn)安裝的ServerList是一個(gè)DomainExtractingServerList,使物理元數(shù)據(jù)可用于負(fù)載平衡器,不使用AWS AMI元數(shù)據(jù)(Netflix依賴)。

服務(wù)器列表默認(rèn)用實(shí)例元數(shù)據(jù)(如遠(yuǎn)程客戶端集合eureka.instance.metadataMap.zone)中提供的“區(qū)域”信息構(gòu)建,如缺少,則可用服務(wù)器主機(jī)名中的域名作為代理用于區(qū)域(如果設(shè)置了標(biāo)志approximateZoneFromHostname)。區(qū)域信息可用,可在ServerListFilter中使用。

定位客戶端相同區(qū)域服務(wù)器,默認(rèn)值ZonePreferenceServerListFilter??蛻舳伺c遠(yuǎn)程方式相同eureka.instance.metadataMap.zone

ps1:設(shè)置客戶端區(qū)域的正統(tǒng)“archaius”方式是通過(guò)一個(gè)名為“@zone”的配置屬性,如可用,Spring Cloud優(yōu)先用所有其他設(shè)置(該鍵必須被引用)YAML配置中)。

ps2:如沒(méi)有其他區(qū)域數(shù)據(jù)源,則基于客戶端配置(與實(shí)例配置相反)進(jìn)行猜測(cè)。我們將eureka.client.availabilityZones(從區(qū)域名稱映射到區(qū)域列表),并將實(shí)例自己的區(qū)域的第一個(gè)區(qū)域(即eureka.client.region,其默認(rèn)為“us-east-1”為與本機(jī)Netflix的兼容性)。

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

方便抽象遠(yuǎn)程服務(wù)器發(fā)現(xiàn),不必在客戶端中對(duì)URL硬編碼,不想使用它,Ribbon和Feign仍適用。假設(shè)已經(jīng)為“商店”申請(qǐng)@RibbonClient,Eureka未被使用(甚至不在類路徑上)。Ribbon客戶端默認(rèn)為已配置的服務(wù)器列表

application.yml

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

ribbon.eureka.enabled = false

application.yml

七、直接使用Ribbon API

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

八、緩存Ribbon配置

Ribbon命名客戶端都有相應(yīng)子應(yīng)用程序上下文,Spring Cloud維護(hù),上下文第一個(gè)請(qǐng)求中被延遲加載到命名的客戶端。通過(guò)指定Ribbon客戶端名稱,啟動(dòng)時(shí)更改延遲加載,饑餓加載上下文

application.yml

ribbon:

? eager-load:

? ? enabled: true

? ? clients: client1, client2, client3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容