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

90%高可用的千億級(jí)微服務(wù)架構(gòu)之道深入學(xué)習(xí)一線大廠必備微服務(wù)架構(gòu)技術(shù)。VIP 教程限時(shí)免費(fèi)領(lǐng)取。 ? 立即查看

Ribbon是一個(gè)客戶端負(fù)載均衡器,它可以很好地控制HTTP和TCP客戶端的行為。Feign已經(jīng)使用Ribbon,所以如果您使用@FeignClient,則本節(jié)也適用。

Ribbon中的中心概念是指定客戶端的概念。每個(gè)負(fù)載平衡器是組合的組合的一部分,它們一起工作以根據(jù)需要聯(lián)系遠(yuǎn)程服務(wù)器,并且集合具有您將其作為應(yīng)用程序開發(fā)人員(例如使用@FeignClient注釋)的名稱。Spring Cloud使用RibbonClientConfiguration為每個(gè)命名的客戶端根據(jù)需要?jiǎng)?chuàng)建一個(gè)新的合奏作為ApplicationContext。這包含(除其他外)ILoadBalancer,RestClient和ServerListFilter。

如何加入Ribbon

要在項(xiàng)目中包含Ribbon,請(qǐng)使用組org.springframework.cloud和工件IDspring-cloud-starter-ribbon的起始器。有關(guān)使用當(dāng)前的Spring Cloud發(fā)布列表設(shè)置構(gòu)建系統(tǒng)的詳細(xì)信息,請(qǐng)參閱Spring Cloud項(xiàng)目頁(yè)面。

自定義Ribbon客戶端

您可以使用<client>.ribbon.*中的外部屬性來(lái)配置Ribbon客戶端的某些位,這與使用Netflix API本身沒(méi)有什么不同,只能使用Spring Boot配置文件。本機(jī)選項(xiàng)可以在CommonClientConfigKey(功能區(qū)內(nèi)核心部分)中作為靜態(tài)字段進(jìn)行檢查。

Spring Cloud還允許您通過(guò)使用@RibbonClient聲明其他配置(位于RibbonClientConfiguration之上)來(lái)完全控制客戶端。例:

@Configuration

@RibbonClient(name = "foo", configuration = FooConfiguration.class)

public class TestConfiguration {

}

在這種情況下,客戶端由RibbonClientConfiguration中已經(jīng)存在的組件與FooConfiguration中的任何組件組成(后者通常會(huì)覆蓋前者)。

警告FooConfiguration必須是@Configuration,但請(qǐng)注意,它不在主應(yīng)用程序上下文的@ComponentScan中,否則將由所有@RibbonClients共享。如果您使用@ComponentScan(或@SpringBootApplication),則需要采取措施避免包含(例如將其放在一個(gè)單獨(dú)的,不重疊的包中,或者指定要在@ComponentScan)。

Spring Cloud Netflix默認(rèn)情況下為Ribbon(BeanTypebeanName:ClassName)提供以下bean:

IClientConfigribbonClientConfig:DefaultClientConfigImpl

IRuleribbonRule:ZoneAvoidanceRule

IPingribbonPing:NoOpPing

ServerList<Server>ribbonServerList:ConfigurationBasedServerList

ServerListFilter<Server>ribbonServerListFilter:ZonePreferenceServerListFilter

ILoadBalancerribbonLoadBalancer:ZoneAwareLoadBalancer

ServerListUpdaterribbonServerListUpdater:PollingServerListUpdater

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

@Configuration

public class FooConfiguration {

? ? @Bean

? ? public IPing ribbonPing(IClientConfig config) {

? ? ? ? return new PingUrl();

? ? }

}

這用PingUrl代替NoOpPing。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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