W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
將Dubbo應(yīng)用的配置放到外部集中管理
外部化配置目的之一是實(shí)現(xiàn)配置的集中式管理,這部分業(yè)界已經(jīng)有很多成熟的專業(yè)配置系統(tǒng)如 Apollo, Nacos 等,Dubbo 所做的主要是保證能配合這些系統(tǒng)正常工作。
外部化配置和其他本地配置在內(nèi)容和格式上并無區(qū)別,可以簡單理解為 dubbo.properties 的外部化存儲(chǔ),配置中心更適合將一些公共配置如注冊(cè)中心、元數(shù)據(jù)中心配置等抽取以便做集中管理。
# 將注冊(cè)中心地址、元數(shù)據(jù)中心地址等配置集中管理,可以做到統(tǒng)一環(huán)境、減少開發(fā)側(cè)感知。
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.simplified=true
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.application.qos.port=33333
從配置中心讀取外部化配置,可以按照下面的方法指定配置中心:
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
或者
dubbo.config-center.address=zookeeper://127.0.0.1:2181
或者
ConfigCenterConfig configCenter = new ConfigCenterConfig();
configCenter.setAddress("zookeeper://127.0.0.1:2181");
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
默認(rèn)所有的配置都存儲(chǔ)在 /dubbo/config 節(jié)點(diǎn),具體節(jié)點(diǎn)結(jié)構(gòu)圖如下:
<dubbo:config-center protocol="apollo" address="127.0.0.1:2181"/>
Apollo中的一個(gè)核心概念是命名空間 - namespace(和上面zookeeper的namespace概念不同),在這里全局和應(yīng)用級(jí)別配置就是通過命名空間來區(qū)分的。
默認(rèn)情況下,Dubbo會(huì)從名叫dubbo(由于 Apollo 不支持特殊后綴 .properties )的命名空間中讀取全局配置(<dubbo:config-center namespace="your namespace">)
由于 Apollo 也默認(rèn)將會(huì)在 dubbo namespace 中存儲(chǔ)服務(wù)治理規(guī)則(如路由規(guī)則),建議通過單獨(dú)配置 group 將服務(wù)治理和配置文件托管分離開,以 XML 配置方式為例:
<dubbo namespace="governance" group ="dubbo"/>
這里,服務(wù)治理規(guī)則將存儲(chǔ)在 governance namespace,而配置文件將存儲(chǔ)在 dubbo namespace,如下圖所示:
關(guān)于文件配置托管,相當(dāng)于是把 dubbo.properties 配置文件的內(nèi)容存儲(chǔ)在了 Apollo 中,應(yīng)用通過關(guān)聯(lián)共享的 dubbo namespace 繼承公共配置, 應(yīng)用也可以按照 Apollo 的做法來覆蓋個(gè)別配置項(xiàng)。
<dubbo:config-center address="nacos://127.0.0.1:8848?username=nacos&password=nacos">
</dubbo:config-center>
Nacos雖然也存在命名空間 - namespace 的概念,但在 namespace 之下,還存在 group 概念。即通過 namespace 和 group 以及 dataId 去定位一個(gè)配置項(xiàng),在不指定 namespace 的情況下,默認(rèn)使用 public 作為默認(rèn)的命名空間。
在默認(rèn)情況下,全局配置會(huì)讀取 namespace : public,dataId: dubbo.properties,group: dubbo 配置項(xiàng)中的內(nèi)容作為全局配置。應(yīng)用級(jí)別的 group 和全局級(jí)別的 group 存在一點(diǎn)差異, 應(yīng)用級(jí)別會(huì)讀取 namespace: public,dataId: dubbo.properties,group: your application name 作為應(yīng)用級(jí)別的配置。
全局:
應(yīng)用級(jí)別:
所謂 Dubbo 對(duì)配置中心的支持,本質(zhì)上就是把 .properties 從遠(yuǎn)程拉取到本地,然后和本地的配置做一次融合。理論上只要 Dubbo 框架能拿到需要的配置就可以正常的啟動(dòng),它并不關(guān)心這些配置是自己加載到的還是應(yīng)用直接塞給它的,所以Dubbo還提供了以下API,讓用戶將自己組織好的配置塞給 Dubbo 框架(配置加載的過程是用戶要完成的),這樣 Dubbo 框架就不再直接和 Apollo 或 Zookeeper 做讀取配置交互。
// 應(yīng)用自行加載配置
Map<String, String> dubboConfigurations = new HashMap<>();
dubboConfigurations.put("dubbo.registry.address", "zookeeper://127.0.0.1:2181");
dubboConfigurations.put("dubbo.registry.simplified", "true");
//將組織好的配置塞給Dubbo框架
ConfigCenterConfig configCenter = new ConfigCenterConfig();
configCenter.setExternalConfig(dubboConfigurations);
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: