簡述
Ribbon是 Netflflixfa 發布的一個負載均衡器,有助於控制 HTTP 和 TCP客戶端行為。在 SpringCloud 中,Eureka一般配合Ribbon進行使用,Ribbon提供了客戶端負載均衡的功能,Ribbon利用從Eureka中讀取到的服務信息,在調用服務節點提供的服務時,會合理的進行負載。在SpringCloud中可以將注冊中心和Ribbon配合使用,Ribbon自動的從注冊中心中獲取服務提供者的列表信息,並基於內置的負載均衡算法,請求服務。
主要功能
服務調用
基於Ribbon實現服務調用, 是通過拉取到的所有服務列表組成(服務名-請求路徑的)映射關系。借助
RestTemplate 最終進行調用。
我們只需在
RestTemplate配置上方加入
LoadBalanced注解即可使用Ribbon的服務調用功能

此時的
restTemplate的url的ip地址只需寫調用的服務名稱即可,Ribbon會自動幫我們進行映射

負載均衡
當有多個服務提供者時,Ribbon可以根據負載均衡的算法自動的選擇需要調用的服務地址
Ribbon是一個典型的客戶端負載均衡器,Ribbon會獲取服務的所有地址,根據內部的負載均衡算法獲取本次請求的有效地址。
當我們為restTemplate打上LoadBalanced注解時,Ribbon默認啟動了輪詢策略的負載均衡。
負載均衡策略
Ribbon默認的負載均衡策略是輪詢策略,當然也可以自定義Ribbon的負載均衡策略。
yml配置格式為:服務名 - ribbon - NFLoadBalancerRuleClassName :策略
##需要調用的微服務名稱
shop-service-product:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Ribbon請求重試配置
Ribbon的服務請求提供了請求重試的機制,當Ribbon請求一個服務失敗時可以設定請求重試的相關機制,讓客戶端得到更快的響應
service-product:
ribbon:
#NFLoadBalancerRuleClassName: 修改Ribbon的負載均衡策略
ConnectTimeout: 250 # Ribbon的連接超時時間
ReadTimeout: 1000 # Ribbon的數據讀取超時時間
OkToRetryOnAllOperations: true # 是否對所有操作都進行重試
MaxAutoRetriesNextServer: 1 # 切換實例的重試次數
MaxAutoRetries: 1 # 對當前實例的重試次數