一、restTemplate 是 Spring Resources 中一個訪問第三方 API 接口的網絡請求框架,用來消費REST 服務的緩存
二、ribbon 做爲服務消費者的負載均衡器,有兩種使用 方式網絡
1)ribbon和restTemplate 相結合app
2)ribbon和feign相結合,feign已經默認集成了 ribbon負載均衡
三、負載均衡器的核心類LoadBalancerClient框架
LoadBalancerClient 的 choose(」eureka-client'’)方法能夠輪流獲得 eureka-client 的兩個 服務實例的信息。google
@Autowiredrest
private LoadBalancerClient loadBalancer;server
@GetMapping (」/ testRibbon」)對象
public String testRibbon () {接口
Serviceinstance instance = loadBalancer.choose (」eureka client");
return instance . getHost ()+」:」+i nstance . getPor t ();
}
}
四、ribbon獲取服務來源
1)從 Eureka Client獲取獲取服務的實例列表
ribbon會默認從 Eureka Client 的服務註冊列表中獲取服務的信息,並緩存一份。
根據緩存的服務註冊列表信息,能夠經過 LoadBalancerClient 來選擇不一樣的服務實例, 從而實現負載均衡
2)從本身維護的列表中獲取服務的實例
若是禁止 ribbon從 Eureka 獲取註冊列表信息,則須要本身去維護一份服 務註冊列表信息
stores :
ribbon:
listOfServers : exarnple . corn, google. corn
ribbon :
eureka :
enabled: false
五、ribbon源碼
1)ServiceInstanceChooser ---->ServiceInstance choose(String serviceId);
2)RibbonLoadBalancerClient----->ServiceInstance choose(String serviceId)---->Server getServer(ILoadBalancer loadBalancer)
3)ILoadBalancer---->Server chooseServer(Object var1)
4)DynamicServerListLoadBalancer---->Server chooseServer(Object var1)
5)IRule ------> Server choose(Object key)
BestAvailableRule: 選擇最小請求數。
ClientConfigEnabledRoundRobinRule:輪詢。
RandornRule: 隨機選擇一個 server。
RoundRobinRule: 輪詢選擇 server。
ReRule: 根據輪詢的方式重試。
WeightedResponseTirneRule: 根據響應時間去分配一個 weight , weight 越低,被選 擇的可能性就越低。
ZoneAvoidanceRule:根據 server 的 zone 區域和可用性來輪詢選
六、 ribbon 的負載均衡主要是經過 LoadBalancerClient 來實現的,而 LoadBalancerClient 具體交給了 ILoadBalancer 來處理, ILoadBalancer 經過配置 !Rule、 !Ping 等,向 EurekaClient 獲取註冊列表的信息,默認每 10 秒向 EurekaClient 發送一次「ping」, 進而檢查是否須要更新 服務的註冊列表信息。最後,在獲得服務註冊列表信息後, ILoadBalancer 根據!Rule 的策略進 行負載均衡。 而 RestTemplate 加上@LoadBalance 註解後,在遠程調度時可以負載均衡, 主要是維護了 一個被@LoadBalance 註解的 RestTemplate 列表,並給該列表中的 RestTemplate 對象添加了攔 截器。在攔截器的方法中,將遠程調度方法交給了 Ribbon 的負載均衡器 LoadBalancerClient 去處理,從而達到了負載均衡的目