Nacos

Nacos 注册中心的基本用法和工作原理。

1 前提条件

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

2 使用说明

在此处查看 完整示例代码

2.1 添加依赖项

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.0.9</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
      <version>2.1.0</version>
    </dependency>
     <!-- Introduce Dubbo Nacos extension, or you can add Nacos dependency directly as shown above-->
     <!--
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>3.0.9</version>
        </dependency>
     -->
</dependencies>

添加 Dubbo 和 Nacos 依赖项

Dubbo 3.0.0 及以上版本需要 nacos-client 2.0.0 及以上版本

2.2 配置并启用 Nacos

# application.yml (Spring Boot)
dubbo
 registry
   address: nacos://localhost:8848

# dubbo.properties
dubbo.registry.address=nacos://localhost:8848

<dubbo:registry address="nacos://localhost:8848" />

要启用该应用程序,请查看注册后的外观或工作原理,请参阅[工作原理](#4-工作原理)。

3 高级配置

3.1 身份验证

# application.yml (Spring Boot)
dubbo
 registry
   address: nacos://localhost:8848?username=nacos&password=nacos

# dubbo.properties
dubbo.registry.address: nacos://nacos:nacos@localhost:8848

3.2 自定义命名空间

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848
   parameters.namespace: 5cbb70a5-xxx-xxx-xxx-d43479ae0932

3.3 自定义分组

# application.yml
dubbo:
 registry:
   address: nacos://localhost:8848
   group: dubbo

如果未配置,则默认情况下由 Nacos 指定组。组和命名空间代表 Nacos 中不同的隔离级别。一般来说,命名空间用于隔离不同的用户或环境,而组用于在同一环境中对数据进行进一步分组。

3.4 注册接口级消费者

Dubbo3.0.0 之后,添加了是否注册消费者的参数。如果需要将消费者注册到 nacos 注册中心,则需要将参数 (register-consumer-url) 设置为 true,默认为 false。

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848?register-consumer-url=true

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848
    parameters.register-consumer-url: true
    

3.5 更多配置

参数名称中文描述默认值
username连接到 Nacos 服务器的用户名nacos
paasword连接到 Nacos 服务器的密码nacos
backup备用地址null
namespace命名空间 IDpublic
group组名DEFAULT_GROUP
register-consumer-url是否注册消费者端false
com.alibaba.nacos.naming.log.filename初始化日志文件名naming.log
endpoint连接到 Nacos 服务器指定的连接点,请参考 文档empty
endpointPort连接到 Nacos 服务器指定的连接点端口,您可以参考 文档empty
endpointQueryParams端点查询参数查询null
isUseCloudNamespaceParsing是否解析云环境中的命名空间参数true
isUseEndpointParsingRule是否启用端点参数规则解析true
namingLoadCacheAtStart是否在启动时先读取本地缓存true
namingCacheRegistryDir指定缓存子目录,位置为 …/nacos/{SUB_DIR}/namingempty
namingClientBeatThreadCount客户端心跳线程池大小机器 CPU 数量的一半
namingPollingThreadCount用于数据更新的客户端定时轮询线程池大小机器 CPU 数量的一半
namingRequestDomainMaxRetryCount客户端通过 HTTP 向 Nacos 服务器请求的重试次数3
namingPushEmptyProtection当服务没有有效的(健康的)实例时,是否启用保护,启用后将使用旧的服务实例false
push.receiver.udp.port客户端 UDP 端口null

在 nacos-server@1.0.0 版本之后,支持客户端通过向服务器上报一些包含特定元数据的实例来控制实例的一些行为。

参数名称中文描述默认值
preserved.heart.beat.timeout实例在不发送心跳后,从健康状态变为不健康状态的时间(以毫秒为单位)15000
preserved.ip.delete.timeout实例在不发送心跳后被服务器删除的时间(以毫秒为单位)30000
preserved.heart.beat.interval实例在客户端上报心跳的间隔时间(以毫秒为单位)5000
preserved.instance.id.generator此实例的 ID 生成策略,当值为 snowflake 时,它将从 0 开始递增简单
preserved.register.source注册实例注册服务框架类型(例如 Dubbo、Spring Cloud 等)empty

这些参数可以通过类似于 namespace 的参数扩展方式配置到 Nacos,例如

dubbo.registry.parameters.preserved.heart.beat.timeout=5000

4 工作原理

以下仅展示 Nacos 作为 Dubbo 注册中心的工作原理。建议使用 Dubbo Admin 进行 Dubbo 服务运维

4.1 Dubbo2 注册数据

然后,重启您的 Dubbo 应用,Dubbo 的服务提供和消费信息就可以在 Nacos 控制台显示了

dubbo-registry-nacos-1.png

如图所示,服务名前缀为 providers: 的是服务提供者的元信息,consumers: 代表服务消费者的元信息。点击“详情”可查看服务状态详情

image-dubbo-registry-nacos-2.png

4.2 Dubbo3 注册数据

应用级服务发现的“服务名”为应用名

Dubbo3 默认采用“应用级服务发现 + 接口级服务发现”的双注册模式,因此你会发现 Nacos 控制台中同时出现了应用级服务(应用名)和接口级服务(接口名),你可以通过配置 dubbo .registry.register-mode=instance/interface/all 来改变注册行为。


上次修改时间:2023 年 1 月 2 日: 增强英文文档 (#1798) (95a9f4f6c1c)