Nacos

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

1 前置条件

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

2 使用说明

在此查看完整示例代码

2.1 增加依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.dubbo</groupId>
  4. <artifactId>dubbo</artifactId>
  5. <version>3.0.9</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.alibaba.nacos</groupId>
  9. <artifactId>nacos-client</artifactId>
  10. <version>2.1.0</version>
  11. </dependency>
  12. <!-- Introduce Dubbo Nacos extension, or you can add Nacos dependency directly as shown above-->
  13. <!--
  14. <dependency>
  15. <groupId>org.apache.dubbo</groupId>
  16. <artifactId>dubbo-registry-nacos</artifactId>
  17. <version>3.0.9</version>
  18. </dependency>
  19. -->
  20. </dependencies>

增加 Dubbo 与 Nacos 依赖

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

2.2 配置并启用 Nacos

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

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

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

启用应用,查看注册后的效果或工作原理,请查看 工作原理

3 高级配置

3.1 认证

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

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

3.2 自定义命名空间

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

或者

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

3.3 自定义分组

  1. # application.yml
  2. dubbo:
  3. registry:
  4. address: nacos://localhost:8848
  5. group: dubbo

如果不配置的话,group 是由 Nacos 默认指定。group 和 namespace 在 Nacos 中代表不同的隔离层次,通常来说 namespace 用来隔离不同的用户或环境,group 用来对同一环境内的数据做进一步归组。

3.4 注册接口级消费者

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

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

或者

  1. # application.yml
  2. dubbo:
  3. registry:
  4. address: nacos://localhost:8848
  5. parameters.register-consumer-url: true

3.5 更多配置

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

在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开始增加simple
preserved.register.source注册实例注册时服务框架类型(例如Dubbo,Spring Cloud等)

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

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

4 工作原理

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

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 来改变注册行为。

最后修改 December 16, 2022: Fix check (#1736) (97972c1)