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。
原始碼來源:http://minglisoft.cn/honghu/technology.html