需要兩份或多份相同的性質的服務的子產品,位址與端口不同,服務子產品名稱相同,通路者通過名稱進行通路
讓通路者進行負載均衡的選擇
在Eureka中發送這個路徑我使用的是名字,而不是ip,這裡面的負載均衡就是由我們的Ribbon實作的,
如過在浏覽器中搜尋這個路徑肯定是查不到的,是以說這個Ribbon實作了Eureka中的負載均衡
@LoadBalanced注解就是攔截RestTemplate的請求,交給Ribbon來處理
Ribbon根據請求的服務名去拉取Ereuka注冊中心裡的服務清單
然後去做負載均衡處理,選擇好服務清單中某一個ip後,會把服務名稱改為選擇好的ip,重新發送請求給提供者
通過源碼 類LoadBalancerInterceptor 中 的 intercept(final HttpRequest request, final byte[] body, final ClientHttpRequestExecution execution) 方法可以看出
Ribbon的負載均衡政策由IRule決定的,可以通過Irule接口自定義它的政策,預設輪詢政策
有全局微服務配置,和局部服務的Ribbon負載均衡 方式有xml和注解
Ribbon有懶加載和饑餓加載
預設懶加載:第一次加載拉去服務,然後緩存,往後就會很快
第一次加載
第二次加載
饑餓加載:在配置中對某個服務開啟饑餓加載
ribbon:
eager-load:
enabled:true #開啟饑餓加載
clients:userservice #指定對userservice這個服務進行饑餓加載
啟動後測試
Eureka的負載均衡就是由Ribbon控制的