Dubbo配置——動態配置中心和服務治理

  配置中心(v2.7.0)在Dubbo中承擔兩個職責:node

    1. 外部化配置。啓動配置的集中式存儲 (簡單理解爲dubbo.properties的外部化存儲)。
    1. 服務治理。服務治理規則的存儲與通知。

  啓用動態配置(以Zookeeper爲例,可查看動態配置配置項詳解):bash

<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
複製代碼

  或者app

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=true

dubbo.metadataReport.address=zookeeper://127.0.0.1:2181

dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

dubbo.application.qos.port=33333
複製代碼
  • 優先級

  外部化配置默認較本地配置有更高的優先級,所以這裏配置的內容會覆蓋本地配置值,你也可經過如下選項調整配置中心的優先級:spa

-Ddubbo.configCenter.highestPriority=false
複製代碼
  • 做用域

  外部化配置有全局和應用兩個級別,全局配置是全部應用共享的,應用級配置是由每一個應用本身維護且只對自身可見的。設計

  當前已支持的擴展實現有Zookeeper、Apollo。code

Zookeeper
<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>
複製代碼

  默認全部的配置都存儲在/dubbo/config節點,具體節點結構圖以下:router

  • 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的命名空間中讀取全局配置(<dubbo:config-center namespace="your namespace">)cdn

  而應用自有的配置,會從application命名空間讀取

  • 注意:當前dubbo.properties是做爲一個key存儲在Apollo 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,條件路由
相關文章
相關標籤/搜索