ribbon 原始碼分析
一、兩個註解
ribbonclients 、 ribbonclients 註解上面都匯入了 這個類 @import(ribbonclientconfigurationregistrar.class)
ribbonclientconfigurationregistrar 這個類 實現了 importbeandefinitionregistrar 介面。
註冊成 ribbonclientspecification 這個類的bean,供後面使用。
二、 在 netflix-ribbon 包下的 spring.factories 的 enableautoconfiguration 自動載入這個類 ribbonautoconfiguration
這個類是 @autoconfigurebefore(
2、public loadbalancerclient loadbalancerclient()
三、 也是通過八爪魚 載入這個類 loadbalancerautoconfiguration
@bean
public loadbalancerinterceptor ribboninterceptor(
loadbalancerclient loadbalancerclient,
loadbalancerrequestfactory requestfactory)
生產個重要的bean loadbalancerinterceptor 建構函式裡的 loadbalancerclient 就是上面第二步生成的ribbonloadbalancerclient類
@bean
@conditionalo****singbean
public resttemplatecustomizer resttemplatecustomizer(
final loadbalancerinterceptor loadbalancerinterceptor) ;
}
@bean
public smartinitializingsingleton loadbalancedresttemplateinitializerdeprecated(
final objectprovider> resttemplatecustomizers)
}});
}而 resttemplate extends interceptinghttpaccessor 實現了這個類 ,interceptinghttpaccessor 裡面有個屬性
private final listinterceptors = new arraylist<>();
而 loadbalancerinterceptor 實現了 clienthttprequestinterceptor 這個介面。
總結 loadbalancerautoconfiguration 這個類的作用就是把標有 loadbalanced 註解的 resttemplate 類 放入到 ***裡去。
四、loadbalancerinterceptor 這個類的 intercept 方法
return this.loadbalancer.execute(servicename, requestfactory.createrequest(request, body, execution));
就是執行 ribbonloadbalanceclient 的 execute方法
iloadbalancer有很多實現,那具體是用的哪個類呢,可以通過ribbonclientconfiguration 也檢視
ribbon負載均衡迴圈策略原始碼
在用ribbon負載均衡取eureka註冊中心中的位址時,預設採用迴圈策略,例如商品服務有3個,分別為url1,url2,url3,那麼在客戶端第一次取時,會取到url1,第二次取時取到url2,第三次是url3,然後依次迴圈。很好奇這種演算法是怎麼保證永遠是順序取的,如果在高併發下,是否也能按這個...
Ribbon原始碼解析及常見問題
1.遇到的問題及對應原始碼 1.1.ribbon loadbalancer 請求快取 1.1.1.問題描述 spring cloud 版本 dalston.sr1,註冊中心 eureka.基於 rest 的微服務架構中,使用 ribbon 來作為客戶端負載.當乙個服務呼叫另乙個服務的時候,ribbo...
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...