Ribbon是一個客戶端負載均衡器,它能夠很好地控制HTTP和TCP客戶端的行爲。Feign已經使用Ribbon,因此若是您使用@FeignClient,則本節也適用。html
Ribbon中的中心概念是指定客戶端的概念。每一個負載平衡器是組合的組合的一部分,它們一塊兒工做以根據須要聯繫遠程服務器,而且集合具備您將其做爲應用程序開發人員(例如使用@FeignClient註釋)的名稱。Spring Cloud使用RibbonClientConfiguration爲每一個命名的客戶端根據須要建立一個新的合奏做爲ApplicationContext。這包含(除其餘外)ILoadBalancer,RestClient和ServerListFilter。spring
如何加入Ribbon服務器
要在項目中包含Ribbon,請使用組org.springframework.cloud和工件ID spring-cloud-starter-ribbon的起始器。有關使用當前的Spring Cloud發佈列表設置構建系統的詳細信息,請參閱Spring Cloud項目頁面。負載均衡
自定義Ribbon客戶端cdn
您可使用.ribbon.*中的外部屬性來配置Ribbon客戶端的某些位,這與使用Netflix API自己沒有什麼不一樣,只能使用Spring Boot配置文件。本機選項能夠在CommonClientConfigKey(功能區內核心部分)中做爲靜態字段進行檢查。htm
Spring Cloud還容許您經過使用@RibbonClient聲明其餘配置(位於RibbonClientConfiguration之上)來徹底控制客戶端。例:blog
@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:DefaultClientConfigImplit
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