Nacos

Nacos 元数据中心的基本使用和工作原理

1 准备工作

当 Dubbo 使用 3.0.0 及以上版本时,需要使用 Nacos 2.0.0 及以上版本

2 使用说明

Dubbo 集成 Nacos 作为元数据中心的操作步骤非常简单,大致分为两步:添加 Maven 依赖配置元数据中心

如果未配置元数据地址(dubbo.metadata-report.address),则将使用注册中心的地址作为元数据中心。

2.1 添加 Maven 依赖

如果项目已启用 Nacos 作为注册中心,则无需额外配置。

如果未启用 Nacos 注册中心,请参考 [向注册中心添加 Nacos 依赖](../../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,在命名空间下,还有分组的概念。也就是说,通过命名空间、分组和 dataId 来定位一个配置项。如果未指定命名空间,则默认使用 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 传递给服务器以比较 md5 值。如果不一致,则表示在此期间已被其他客户端修改。重新获取凭证并重试(CAS)。目前,如果 6 次重试均失败,则放弃更新映射行为。

Nacos api

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

映射信息位于命名空间:'public',dataId:'{服务名称}',分组:'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)