Nacos

Nacos 元資料中心基本使用與工作原理

1 準備工作

當 Dubbo 使用 3.0.0 及以上版本時,需要使用 Nacos 2.0.0 及以上版本

2 使用說明

Dubbo 整合 Nacos 作為元資料中心的操作步驟非常簡單,大致分為兩個步驟:新增 Maven dependencies配置元資料中心

如果未配置元資料位址 (dubbo.metadata-report.address),將使用註冊中心的位址作為元資料中心。

2.1 新增 Maven dependency

如果專案已啟用 Nacos 作為註冊中心,則無需額外配置。

如果未啟用 Nacos 註冊中心,請參考 [註冊中心新增 Nacos dependencies](../../registry/nacos/#21-Add dependencies)。

2.2 啟用 Nacos 配置中心

<dubbo:metadata-report address="nacos://127.0.0.1:8848"/>

dubbo
  metadata-report
    address: nacos://127.0.0.1:8848

dubbo.metadata-report.address=nacos://127.0.0.1:8848

MetadataReportConfig metadataConfig = new MetadataReportConfig();
metadataConfig.setAddress("nacos://127.0.0.1:8848");

關於 address 格式,請參考 [Nacos 註冊中心 - 啟用配置](../../registry/nacos/#22-configure and enable-nacos)

3 進階配置

完整的配置參數,請參考 metadata-report-config

4 工作原理

4.1 [服務運維元資料](../overview/#2-Service Operation and Maintenance Metadata)

在 Nacos 控制台上,您可以看到服務提供者和消費者註冊的與服務運維相關的元數據資訊。

image-dubbo-metadata-nacos-1.png

Nacos 本身就存在配置中心的概念,恰好可以用於元數據儲存。在配置中心的場景下,有命名空間(Namespace)的概念,在命名空間下,還有分組(Group)的概念。也就是通過命名空間、分組和 Data ID 定位一個配置項。如果沒有指定命名空間,則預設使用 public 作為預設命名空間。

Provider: namespace: 'public', dataId: '{service name}:{version}:{group}:provider:{application name}', group: 'dubbo'
Consumer: namespace: 'public', dataId: '{service name}:{version}:{group}:consumer:{application name}', group: 'dubbo'

當版本或分組不存在時,會保留 :

Provider: namespace: 'public', dataId: '{service name}:::provider:{application name}', group: 'dubbo'
Consumer: namespace: 'public', dataId: '{service name}:::consumer:{application name}', group: 'dubbo'

提供者介面元數據詳情(使用 report-definition=true 控制是否需要回報這部分數據)。

image-dubbo-metadata-nacos-3.png

消費者介面元數據詳情(是否回報由 report-consumer-definition=true 控制,預設為 false)。

image-dubbo-metadata-nacos-4.png

4.2 [地址發現 - 介面-應用映射](../overview//#11-Interface—Application Mapping Relationship)

如上所述,服務名稱和應用程式名稱可能是一對多的關係。在 Nacos 中,使用單個鍵值對進行儲存,多個應用程式名稱用英文逗號 , 分隔。由於使用單個鍵值對儲存數據,在多個客戶端的情況下可能會出現併發覆蓋的問題。因此,我們使用 Nacos 的 publishConfigCas 功能來解決這個問題。在 Nacos 中,使用 publishConfigCas 會讓使用者傳遞一個參數 casMd5,它表示先前配置內容的 MD5 值。在更新之前,不同的客戶端首先檢查 Nacos 的內容值,計算 MD5 值,並將其作為本地憑證。更新時,將憑證的 MD5 傳遞給伺服器進行比較。如果不一致,則表示在此期間已被其他客戶端修改。重新取得憑證並重試(CAS)。目前,如果 6 次重試失敗,則放棄更新映射的行為。

Nacos API

ConfigService configService = ...
configService.publishConfigCas(key, group, content, ticket);

映射資訊位於命名空間:`public`,Data ID:`{服務名稱}`,分組:`mapping`。

nacos-metadata-report-service-name-mapping.png

4.3 [地址發現 - 介面配置元數據](../overview/#12-Interface Configuration Metadata)

要啟用遠端介面配置元數據註冊,需要在應用程式中新增以下配置,因為預設情況下,Dubbo3 應用程式級服務發現會啟用服務自省模式,並且不會將數據註冊到元數據中心。

 dubbo.application.metadata-type=remote

或者,在自省模式下仍然啟用集中式元數據註冊。

dubbo.application.metadata-type=local
dubbo.metadata-report.report-metadata=true

Nacos 伺服器中元數據資訊的詳情如下:

image-dubbo-metadata-nacos-2.png


最後修改日期:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)