Dubbo(五)之动态配置中心
轉載自??Dubbo動態配置中心
Dubbo 2.7 中的動態配置中心
配置中心(v2.7.0)在 Dubbo 中承擔兩個職責:
啟用動態配置,以 Zookeeper 為例,可查看?動態配置配置項詳解
<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 框架會默認將此 Zookeeper 用作配置中心,但將只作服務治理用途。
外部化配置
外部化配置目的之一是實現配置的集中式管理,這部分業界已經有很多成熟的專業配置系統如 Apollo, Nacos 等,Dubbo 所做的主要是保證能配合這些系統正常工作。
外部化配置和其他本地配置在內容和格式上并無區別,可以簡單理解為?dubbo.properties?的外部化存儲,配置中心更適合將一些公共配置如注冊中心、元數據中心配置等抽取以便做集中管理。
# 將注冊中心地址、元數據中心地址等配置集中管理,可以做到統一環境、減少開發側感知。 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-
優先級
外部化配置默認較本地配置有更高的優先級,因此這里配置的內容會覆蓋本地配置值,關于?各配置形式間的覆蓋關系?有單獨一章說明,你也可通過以下選項調整配置中心的優先級:
-Ddubbo.config-center.highest-priority=false -
作用域
外部化配置有全局和應用兩個級別,全局配置是所有應用共享的,應用級配置是由每個應用自己維護且只對自身可見的。當前已支持的擴展實現有Zookeeper、Apollo。
Zookeeper
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>默認所有的配置都存儲在?/dubbo/config?節點,具體節點結構圖如下:
?
- namespace,用于不同配置的環境隔離。
- config,Dubbo約定的固定節點,不可更改,所有配置和服務治理規則都存儲在此節點下。
- dubbo/application,分別用來隔離全局配置、應用級別配置:dubbo是默認group值,application對應應用名
- dubbo.properties,此節點的node value存儲具體配置內容
Apollo
<dubbo:config-center protocol="apollo" address="127.0.0.1:2181"/>Apollo中的一個核心概念是命名空間 - namespace(和上面zookeeper的namespace概念不同),在這里全局和應用級別配置就是通過命名空間來區分的。
默認情況下,Dubbo會從名叫dubbo(由于 Apollo 不支持特殊后綴?.properties?)的命名空間中讀取全局配置(<dubbo:config-center namespace="your namespace">)
?
由于 Apollo 也默認將會在?dubbo?namespace 中存儲服務治理規則(如路由規則),建議通過單獨配置?group?將服務治理和配置文件托管分離開,以 XML 配置方式為例:
<dubbo namespace="governance" group ="dubbo"/>這里,服務治理規則將存儲在 governance namespace,而配置文件將存儲在 dubbo namespace,如下圖所示:?
關于文件配置托管,相當于是把?dubbo.properties?配置文件的內容存儲在了 Apollo 中,應用通過關聯共享的?dubbo?namespace 繼承公共配置, 應用也可以按照 Apollo 的做法來覆蓋個別配置項。
自己加載外部化配置
所謂 Dubbo 對配置中心的支持,本質上就是把?.properties?從遠程拉取到本地,然后和本地的配置做一次融合。理論上只要 Dubbo 框架能拿到需要的配置就可以正常的啟動,它并不關心這些配置是自己加載到的還是應用直接塞給它的,所以Dubbo還提供了以下API,讓用戶將自己組織好的配置塞給 Dubbo 框架(配置加載的過程是用戶要完成的),這樣 Dubbo 框架就不再直接和 Apollo 或 Zookeeper 做讀取配置交互。
// 應用自行加載配置 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);服務治理
Zookeeper
默認節點結構:
?
- namespace,用于不同配置的環境隔離。
- config,Dubbo 約定的固定節點,不可更改,所有配置和服務治理規則都存儲在此節點下。
- dubbo,所有服務治理規則都是全局性的,dubbo 為默認節點
- configurators/tag-router/condition-router,不同的服務治理規則類型,node value 存儲具體規則內容
Apollo
所有的服務治理規則都是全局性的,默認從公共命名空間?dubbo?讀取和訂閱:
?
不同的規則以不同的 key 后綴區分:
- configurators,覆蓋規則
- tag-router,標簽路由
- condition-router,條件路由
總結
以上是生活随笔為你收集整理的Dubbo(五)之动态配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何看自己的路由器是什么型号怎么在电脑上
- 下一篇: Dubbo(六)之属性配置