Dubbo 2.6.2 獲取不到${dubbo.registry.address}

背景

公司原來的配置中心是一個閉源的系統,該系統有幾個痛點問題:無權限控制、敏感配置不能加密、應用和配置的依賴關系混亂。
在這個背景下,運維同學基于k8s的configMap寫了一個配置中心,并推動應用配置從閉源的配置中心遷移到自有的configMap。

獲取dubbo.registry.address配置項

因為我負責這次遷移,所以遷移過程中開發同學碰到的問題都會來問我,其中有一個比較有意思的問題是dubbo 獲取不到dubbo.registry.address配置項。比如明明在application.properties配置文件中配置了該配置項 dubbo.registry.address=zk-0:2181,但應用啟動時就是獲取不到;

源碼

此類問題排查思路也比較直接:直接看源碼!

通過debug,很快定位到dubbo.registry.address是在AbstractInterfaceConfig.java 第188行獲取配置的。

獲取配置

突然發現有點不太對勁,怎么獲取配置的這個方式是靜態方案?!難道沒有和spring的PropertySource打通?

點進去該方法果然發現,這里的配置并不是從spring的PropertySource中獲取的,而是嘗試從系統環境變量中獲取,獲取不到再從配置的文件中獲取。參考com.alibaba.dubbo.common.utils.ConfigUtils#getProperty(java.lang.String, java.lang.String)

獲取配置

這時候真相大白了,人家壓根就沒有去application.properties中獲取,那肯定就拿不到了。

后面想看看dubbo對這個問題進行處理,于是乎打開了2.7.6版本的源碼瞅了瞅。在這個版本中,dubbo變成了從spring中獲取配置的方式。感興趣的小伙伴可以看看相關的源碼,這里就不展開了。

從Spring PropertySource中獲取

解法

  1. 手動配置一個RegistryConfig Spring Bean;
  2. 將dubbo相關配置設置到系統環境變量中;
  3. 升級到2.7.6。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容