-
消費者端dubbo的yml配置
dubbo: consumer: timeout: 300000 protocol: name: dubbo port: -1 cloud: subscribed-services: order-server # subscribed-services: hello-server,account-server,storage-server,order-server
-
按住ctrl + 滑鼠左擊
subscribed-services
如下圖: -
這裡是對應的setter方法,上面找到定義地方:
/** * All services of Dubbo. */ public static final String ALL_DUBBO_SERVICES = "*"; /** * The subscribed services, the default value is "*". The multiple value will use * comma(",") as the separator. * * @see #ALL_DUBBO_SERVICES */ private String subscribedServices = ALL_DUBBO_SERVICES;
讀一讀就知道答案了。預設為*,多個值時候用
,
隔開。
接下來,走走最表面的流程,就是看看怎麼處理我們輸入的資料的,至於是怎麼找到提供者的,先不管。
-
游標點到類
DubboCloudProperties
上面,這裡ctrl+單擊是點不進去的,但是你點一下有提醒:No usages found in Project Files Press Ctrl+Alt+F7 again to search in 'Project and Libraries
-
跟著提醒,Ctrl+Alt+F7,如果提醒關閉了,就雙擊F7,出來下圖。
-
直接回車,就是高亮的這一行。回去複製
ubscribedServices
,不要開頭的s,不管大寫還是小寫,Ctrl+F搜出來看看。 -
通過點選向上向下的箭頭,或者F3(下一個)/Shift+F3(上一個)來讀一讀原始碼。這裡我們看到他在237行時候進行了初始化。
-
老樣子,ctrl+單擊
initSubscribedServices()
方法。讀一下,如果
ALL_DUBBO_SERVICES
等於我們輸入的提供者,就是輸出巴拉巴拉。 -
那麼
ALL_DUBBO_SERVICES
是啥,ctrl點,發現又跳回第一個檔案了:@ConfigurationProperties(prefix = CONFIG_PROPERTY_PREFIX) public class DubboCloudProperties { /** * All services of Dubbo. */ public static final String ALL_DUBBO_SERVICES = "*"; // 這裡是預設為*,如果set方法沒有執行,那麼get時候獲得的就是* private String subscribedServices = ALL_DUBBO_SERVICES; /* ... */ }
-
現在測試一下輸出那個東西,啟動一個提供者,然後消費者訂閱的提供者寫成
*
或者註釋掉。啟動消費者。檢視日誌:
2021-05-27 16:28:24.950 WARN 6564 --- [client.listener] a.c.d.m.r.DubboServiceMetadataRepository : Current application will subscribe all services(size:20) in registry, a lot of memory and CPU cycles may be used, thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services
與步驟8中一致。
-
接著讀else,如果我們填入內容了,就
subscribedServices()
後加入到那個集合中newSubscribedServices.addAll(dubboCloudProperties.subscribedServices());
ctrl點
subscribedServices()
,然後發現又轉到第一個檔案了:再繼續讀一下:使用
commaDelimitedListToStringArray
將我們輸入的東西轉化了字串陣列,處理返回。 -
我們來看看
commaDelimitedListToStringArray
怎麼處理的,找到匯入它的地方:import static org.springframework.util.StringUtils.commaDelimitedListToStringArray;
然後ctrl點:
/** * Convert a comma delimited list (e.g., a row from a CSV file) into an * array of strings. * @param str the input {@code String} (potentially {@code null} or empty) * @return an array of strings, or the empty array in case of empty input */ public static String[] commaDelimitedListToStringArray(@Nullable String str) { return delimitedListToStringArray(str, ","); }
這裡與標題3.中
The multiple value will use comma(",") as the separator.
對應。 -
結論:
-
不寫或者*會訂閱所有的。
-
寫多就使用
,
隔開。
-
簡單讀讀原始碼 - dubbo多提供者(provider)配置方法
相關文章
- 【Dubbo原始碼閱讀系列】之 Dubbo XML 配置載入原始碼XML
- Dubbo原始碼解讀-Dubbo的容器啟動原始碼
- Dubbo原始碼解讀:appendAnnotation [01]原始碼APP
- redux原始碼解讀(簡單易懂版)Redux原始碼
- Mybatis原始碼簡單解讀----構建MyBatis原始碼
- Retrofit原始碼解讀(一)--Retrofit簡單流程原始碼
- 原始碼解讀Dubbo分層設計思想原始碼
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- LinkedHashMap,原始碼解讀就是這麼簡單HashMap原始碼
- Apache Dubbo 原始碼搭建與解讀(八)—— Dubbo 註冊中心之ZooKeeperApache原始碼
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- httprunner3原始碼解讀(1)簡單介紹原始碼模組內容HTTP原始碼
- 閱讀vue原始碼後,簡單實現虛擬domVue原始碼
- 簡單易懂的Vue資料繫結原始碼解讀Vue原始碼
- Laravel 原始碼閱讀指南 -- 載入和讀取 ENV 配置Laravel原始碼
- jQuery方法原始碼定位簡單方法jQuery原始碼
- Redux原始碼createStore解讀常用方法Redux原始碼
- 讀 Zepto 原始碼之內部方法原始碼
- jQuery的extend方法原始碼解讀jQuery原始碼
- 帶你讀原始碼:四大視角多維走讀區塊鏈原始碼原始碼區塊鏈
- Flutter 極簡 App 程式碼簡單解讀FlutterAPP
- PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼SQL原始碼
- PostgreSQL 原始碼解讀(240)- HTAB簡介SQL原始碼
- PostgreSQL 原始碼解讀(249)- 實現簡單的鉤子函式SQL原始碼函式
- Vue 原始碼解讀(6)—— 例項方法Vue原始碼
- 閱讀原始碼的意義與方法原始碼
- 精讀Nginx原始碼·自動指令碼篇(1)如何讀取配置選項?Nginx原始碼指令碼
- HarmonyOS單模組編譯與原始碼導讀編譯原始碼
- SingletonKit單例原始碼閱讀學習單例原始碼
- 跟著大彬讀原始碼 - Redis 7 - 物件編碼之簡單動態字串原始碼Redis物件字串
- 【Spring原始碼分析】配置檔案讀取流程Spring原始碼
- 圖解Dubbo,Dubbo服務提供者詳解圖解
- WeakHashMap,原始碼解讀HashMap原始碼
- Handler原始碼解讀原始碼
- Canal 原始碼走讀原始碼
- ReactorKit原始碼閱讀React原始碼