Spring Cloud Netflix—客戶端負載平衡器:Ribbon

namber發表於2018-03-06

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

Ribbon中的中心概念是指定客戶端的概念。每個負載平衡器是組合的組合的一部分,它們一起工作以根據需要聯絡遠端伺服器,並且集合具有您將其作為應用程式開發人員(例如使用@FeignClient註釋)的名稱。Spring Cloud使用RibbonClientConfiguration為每個命名的客戶端根據需要建立一個新的合奏作為ApplicationContext。這包含(除其他外)ILoadBalancer,RestClient和ServerListFilter。

如何加入Ribbon

要在專案中包含Ribbon,請使用組org.springframework.cloud和工件ID spring-cloud-starter-ribbon的起始器。有關使用當前的Spring Cloud釋出列表設定構建系統的詳細資訊,請參閱Spring Cloud專案頁面。

自定義Ribbon客戶端

您可以使用.ribbon.*中的外部屬性來配置Ribbon客戶端的某些位,這與使用Netflix API本身沒有什麼不同,只能使用Spring Boot配置檔案。本機選項可以在CommonClientConfigKey(功能區核心心部分)中作為靜態欄位進行檢查。

Spring Cloud還允許您通過使用@RibbonClient宣告其他配置(位於RibbonClientConfiguration之上)來完全控制客戶端。例:

@Configuration @RibbonClient(name = "foo", configuration = FooConfiguration.class) public class TestConfiguration { } 在這種情況下,客戶端由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。例:

@Configuration public class FooConfiguration { @Bean public IPing ribbonPing(IClientConfig config) { return new PingUrl(); } } 這用PingUrl代替NoOpPing。

Spring Cloud Netflix—客戶端負載平衡器:Ribbon
原始碼來源:http://minglisoft.cn/honghu/technology.html

相關文章