Dubbo(五)之动态配置中心
轉(zhuǎn)載自??Dubbo動態(tài)配置中心
Dubbo 2.7 中的動態(tài)配置中心
配置中心(v2.7.0)在 Dubbo 中承擔(dān)兩個職責(zé):
啟用動態(tài)配置,以 Zookeeper 為例,可查看?動態(tài)配置配置項詳解
<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");為了兼容 2.6.x 版本配置,在使用 Zookeeper 作為注冊中心,且沒有顯示配置配置中心的情況下,Dubbo 框架會默認(rèn)將此 Zookeeper 用作配置中心,但將只作服務(wù)治理用途。
外部化配置
外部化配置目的之一是實現(xiàn)配置的集中式管理,這部分業(yè)界已經(jīng)有很多成熟的專業(yè)配置系統(tǒng)如 Apollo, Nacos 等,Dubbo 所做的主要是保證能配合這些系統(tǒng)正常工作。
外部化配置和其他本地配置在內(nèi)容和格式上并無區(qū)別,可以簡單理解為?dubbo.properties?的外部化存儲,配置中心更適合將一些公共配置如注冊中心、元數(shù)據(jù)中心配置等抽取以便做集中管理。
# 將注冊中心地址、元數(shù)據(jù)中心地址等配置集中管理,可以做到統(tǒng)一環(huán)境、減少開發(fā)側(cè)感知。 dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.registry.simplified=truedubbo.metadata-report.address=zookeeper://127.0.0.1:2181dubbo.protocol.name=dubbo dubbo.protocol.port=20880dubbo.application.qos.port=33333-
優(yōu)先級
外部化配置默認(rèn)較本地配置有更高的優(yōu)先級,因此這里配置的內(nèi)容會覆蓋本地配置值,關(guān)于?各配置形式間的覆蓋關(guān)系?有單獨一章說明,你也可通過以下選項調(diào)整配置中心的優(yōu)先級:
-Ddubbo.config-center.highest-priority=false -
作用域
外部化配置有全局和應(yīng)用兩個級別,全局配置是所有應(yīng)用共享的,應(yīng)用級配置是由每個應(yīng)用自己維護且只對自身可見的。當(dāng)前已支持的擴展實現(xiàn)有Zookeeper、Apollo。
Zookeeper
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>默認(rèn)所有的配置都存儲在?/dubbo/config?節(jié)點,具體節(jié)點結(jié)構(gòu)圖如下:
?
- namespace,用于不同配置的環(huán)境隔離。
- config,Dubbo約定的固定節(jié)點,不可更改,所有配置和服務(wù)治理規(guī)則都存儲在此節(jié)點下。
- dubbo/application,分別用來隔離全局配置、應(yīng)用級別配置:dubbo是默認(rèn)group值,application對應(yīng)應(yīng)用名
- dubbo.properties,此節(jié)點的node value存儲具體配置內(nèi)容
Apollo
<dubbo:config-center protocol="apollo" address="127.0.0.1:2181"/>Apollo中的一個核心概念是命名空間 - namespace(和上面zookeeper的namespace概念不同),在這里全局和應(yīng)用級別配置就是通過命名空間來區(qū)分的。
默認(rèn)情況下,Dubbo會從名叫dubbo(由于 Apollo 不支持特殊后綴?.properties?)的命名空間中讀取全局配置(<dubbo:config-center namespace="your namespace">)
?
由于 Apollo 也默認(rèn)將會在?dubbo?namespace 中存儲服務(wù)治理規(guī)則(如路由規(guī)則),建議通過單獨配置?group?將服務(wù)治理和配置文件托管分離開,以 XML 配置方式為例:
<dubbo namespace="governance" group ="dubbo"/>這里,服務(wù)治理規(guī)則將存儲在 governance namespace,而配置文件將存儲在 dubbo namespace,如下圖所示:?
關(guān)于文件配置托管,相當(dāng)于是把?dubbo.properties?配置文件的內(nèi)容存儲在了 Apollo 中,應(yīng)用通過關(guān)聯(lián)共享的?dubbo?namespace 繼承公共配置, 應(yīng)用也可以按照 Apollo 的做法來覆蓋個別配置項。
自己加載外部化配置
所謂 Dubbo 對配置中心的支持,本質(zhì)上就是把?.properties?從遠程拉取到本地,然后和本地的配置做一次融合。理論上只要 Dubbo 框架能拿到需要的配置就可以正常的啟動,它并不關(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);服務(wù)治理
Zookeeper
默認(rèn)節(jié)點結(jié)構(gòu):
?
- namespace,用于不同配置的環(huán)境隔離。
- config,Dubbo 約定的固定節(jié)點,不可更改,所有配置和服務(wù)治理規(guī)則都存儲在此節(jié)點下。
- dubbo,所有服務(wù)治理規(guī)則都是全局性的,dubbo 為默認(rèn)節(jié)點
- configurators/tag-router/condition-router,不同的服務(wù)治理規(guī)則類型,node value 存儲具體規(guī)則內(nèi)容
Apollo
所有的服務(wù)治理規(guī)則都是全局性的,默認(rèn)從公共命名空間?dubbo?讀取和訂閱:
?
不同的規(guī)則以不同的 key 后綴區(qū)分:
- configurators,覆蓋規(guī)則
- tag-router,標(biāo)簽路由
- condition-router,條件路由
總結(jié)
以上是生活随笔為你收集整理的Dubbo(五)之动态配置中心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何看自己的路由器是什么型号怎么在电脑上
- 下一篇: 如何有效的防止电脑病毒电脑如何防病毒