Nacos
1 准备工作
- 了解 Dubbo 基本开发步骤
- 参考 Nacos 快速入门 启动 Nacos 服务器
当 Dubbo 使用
3.0.0
及以上版本时,需要使用 Nacos2.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 控制台上,您可以看到服务提供者和消费者注册的与服务运维相关的元数据信息
在 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
控制是否需要报告这部分数据)
消费者接口元信息详细信息(是否报告由 report-consumer-definition=true
控制,默认为 false)
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'。
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 服务器中元数据信息的详细信息如下