Dubbo使用Nacos作为注册中心

使用 Nacos 作为注册中心实现自动服务发现

本示例演示 Nacos 作为注册中心实现自动服务发现,示例基于 Spring Boot 应用展开,可在此查看 完整示例代码

1 基本配置

1.1 增加依赖

增加 dubbo、nacos-client 依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
      <version>2.1.0</version>
    </dependency>
</dependencies>

对于 Spring Boot 应用,可以使用如下 spring-boot-starter:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>3.3.0</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-nacos-spring-boot-starter</artifactId>
    <version>3.3.0</version>
</dependency>

1.2 Nacos 版本

Nacos 版本映射关系:

Dubbo 推荐 Nacos 版本 Nacos 兼容范围
3.3.0 2.2.3 2.x
3.2.21 2.1.0 2.x
3.1.11 2.0.9 2.x
3.0.10 2.0.9 2.x
2.7.21 1.x 1.x
2.6.0 1.x 1.x

1.3 配置并启用 Nacos

# application.yml (Spring Boot)
dubbo
 registry
   address: nacos://localhost:8848
   register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all,默认值为 all,未来版本将切换默认值为 instance

# dubbo.properties
dubbo.registry.address=nacos://localhost:8848
dubbo.registry.register-mode=instance

<dubbo:registry address="nacos://localhost:8848" register-mode="instance"/>

2 高级配置

2.1 认证

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

# dubbo.properties
dubbo.registry.address: nacos://nacos:nacos@localhost:8848
# 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all,默认值为 all,未来版本将切换默认值为 instance
dubbo.registry.register-mode=instance

2.2 自定义命名空间

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848?namespace=5cbb70a5-xxx-xxx-xxx-d43479ae0932
   register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all

或者

# application.yml (Spring Boot)
dubbo:
 registry:
   address: nacos://localhost:8848
   register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
   parameters.namespace: 5cbb70a5-xxx-xxx-xxx-d43479ae0932

2.3 自定义分组

# application.yml
dubbo:
 registry:
   address: nacos://localhost:8848
   register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
   group: dubbo

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

2.4 注册接口级消费者

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

# application.yml
dubbo:
  registry:
    register-mode: instance # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
    address: nacos://localhost:8848?register-consumer-url=true

或者

# application.yml
dubbo:
  registry:
    address: nacos://localhost:8848
    register-mode: instance  # 新用户请设置此值,表示启用应用级服务发现,可选值 interface、instance、all
    parameters.register-consumer-url: true

2.5 更多配置

参数名 中文描述 默认值
username 连接Nacos Server的用户名 nacos
paasword 连接Nacos Server的密码 nacos
backup 备用地址
namespace 命名空间的ID public
group 分组名称 DEFAULT_GROUP
register-consumer-url 是否注册消费端 false
com.alibaba.nacos.naming.log.filename 初始化日志文件名 naming.log
endpoint 连接Nacos Server指定的连接点,可参考文档
endpointPort 连接Nacos Server指定的连接点端口,可以参考文档
endpointQueryParams endpoint查参数询
isUseCloudNamespaceParsing 是否解析云环境中的namespace参数 true
isUseEndpointParsingRule 是否开启endpoint 参数规则解析 true
namingLoadCacheAtStart 启动时是否优先读取本地缓存 true
namingCacheRegistryDir 指定缓存子目录,位置为 .../nacos/{SUB_DIR}/naming
namingClientBeatThreadCount 客户端心跳的线程池大小 机器的CPU数的一半
namingPollingThreadCount 客户端定时轮询数据更新的线程池大小 机器的CPU数的一半
namingRequestDomainMaxRetryCount client通过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,如

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

3 工作原理

在前面的一节中,我们讲解了应用级服务发现与接口级服务发现的区别,以下是两种模式在 Nacos 实现中的具体存储结构。

3.1 Dubbo2 注册数据

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

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

3.2 Dubbo3 注册数据

应用级服务发现的 "服务名" 为应用名

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

相关推荐
魔道不误砍柴功11 分钟前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
失落的香蕉12 分钟前
C语言串讲-2之指针和结构体
java·c语言·开发语言
枫叶_v14 分钟前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
wclass-zhengge14 分钟前
SpringCloud篇(配置中心 - Nacos)
java·spring·spring cloud
路在脚下@15 分钟前
Springboot 的Servlet Web 应用、响应式 Web 应用(Reactive)以及非 Web 应用(None)的特点和适用场景
java·spring boot·servlet
黑马师兄15 分钟前
SpringBoot
java·spring
数据小小爬虫39 分钟前
如何用Java爬虫“偷窥”淘宝商品类目API的返回值
java·爬虫·php
暮春二十四41 分钟前
关于用postman调用接口成功但是使用Java代码调用却失败的问题
java·测试工具·postman
java小吕布1 小时前
Java中Properties的使用详解
java·开发语言·后端
爱吃土豆的程序员1 小时前
在oracle官网下载资源显示400 Bad Request Request Header Or Cookie Too Large 解决办法
java·数据库·oracle·cookie