当前位置: 首页 > news >正文

【005】Dubbo3从0到1系列之Springboot配置dubbo3

五、Springboot配置dubbo3

5.1 软件版本

注册中心: nacos-server-2.3.2 【环境自行准备】

Java 17+

SpringBoot 3.5.6

Maven 3.9.9

dubbo 3.3.5

在这里插入图片描述

✅ dubbo-spring-boot-starter

在这里插入图片描述

5.2 依赖说明

✅ 对于spring boot应用程序,可以引入如下的依赖

  • 经过测试,使用3.3.5版本也可以注册.
<!-- 管理 dubbo 核心依赖,用于识别 application.properties 或 application.yml 中 dubbo. 开头的配置项,扫描 @DubboService 等注解。-->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.3.5</version>
</dependency><!-- 管理 nacos-client 等依赖,使用 Nacos 作为注册中心、配置中心时引入。-->
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId><version>3.3.5</version>
</dependency>

✅ 对于非spring boot应用,需要引入如下的组件

<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>

5.3 搭建工程

✅ 操作步骤

  • 创建父工程

    • 公共模块

      • 接口定义
      • 实体类定义
      • 通用配置、工具类
    • dubbo3服务提供方

      • 对外提供服务
    • dubbo3服务的消费方

      • 消费服务

5.3.1 目录结构如下所示

├───tc-dubbo3-interface
│   ├───src
│   │   ├───main
│   │   │   ├───java
│   │   │   │   └───cn
│   │   │   │       └───tcmeta
│   │   │   │           └───service
│   │   │   │               └───interfaces
│   │   │   └───resources
│   │   └───test
│   │       └───java
│   └───target
│       ├───classes
│       │   └───cn
│       │       └───tcmeta
│       │           └───service
│       │               └───interfaces
│       └───generated-sources
│           └───annotations
├───tc-dubbo3-service-consumer
│   ├───src
│   │   ├───main
│   │   │   ├───java
│   │   │   │   └───cn
│   │   │   │       └───tcmeta
│   │   │   │           └───controller
│   │   │   └───resources
│   │   └───test
│   │       └───java
│   └───target
│       ├───classes
│       │   └───cn
│       │       └───tcmeta
│       │           └───controller
│       └───generated-sources
│           └───annotations
└───tc-dubbo3-service-provider├───src│   ├───main│   │   ├───java│   │   │   └───cn│   │   │       └───tcmeta│   │   │           └───service│   │   │               └───impl│   │   └───resources│   └───test│       └───java└───target├───classes│   └───cn│       └───tcmeta│           └───service│               └───impl└───generated-sources└───annotations

5.3.2 父模块创建

创建一个普通的Maven工程即可,并删除掉src目录.在pom.xml文件引入依赖

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.40</version></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.5.6</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

5.3.3 创建公共模块

定义公共接口, 其它公共功能暂不需要

package cn.tcmeta.service.interfaces;public interface IUserService {String sayHi(String otherName);
}

5.3.4 创建dubbo3的provider

[!tip]

  • 创建模块,引入如下的依赖

✅ 1. 引入依赖

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><dubbo3.version>3.3.5</dubbo3.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>cn.tcmeta</groupId><artifactId>tc-dubbo3-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId><version>${dubbo3.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo3.version}</version></dependency>
</dependencies>

✅ 2. 配置文件application.yml

直接复制即可

# Spring 应用的基本配置
spring:application:name: tc-dubbo-service-provider  # Spring Boot 应用名称,用于服务识别和日志等# 内嵌 Web 服务器端口配置(虽然 Dubbo 服务通常不依赖 HTTP,但 Spring Boot 默认会启动 Web 容器)
server:port: 8082  # Spring Boot 内嵌服务器监听端口(如 Tomcat)# Dubbo 框架相关配置
dubbo:application:name: tc-dubbo-provider        # Dubbo 应用名称,用于注册中心中标识该服务提供者id: tc-dubbo-provider          # Dubbo 应用的唯一 ID(可选,通常与 name 一致)# 监控中心配置(用于收集服务调用统计信息)# monitor:# protocol: dubbo-registry       # 使用注册中心作为监控协议(Dubbo 3 中通常通过注册中心上报监控数据)# 注册中心配置registry:address: nacos://localhost:8848  # 注册中心地址,使用 Nacos,地址为本地 8848 端口register-mode: instance          # 注册模式:# - instance:仅注册应用实例(Dubbo 3 推荐的默认模式)# - all:同时注册应用实例和接口(兼容 Dubbo 2 的行为)# - interface:仅注册接口(已废弃,不推荐)# 配置中心配置(用于动态配置管理)config-center:address: nacos://localhost:8848  # 配置中心地址,同样使用本地 Nacos# 元数据中心配置(用于存储服务元数据,如接口、方法、参数等信息)metadata-report:address: nacos://localhost:8848  # 元数据中心地址,也使用 Nacos 存储# 服务提供方(Provider)的默认行为配置provider:threadpool: fixed              # 线程池类型:fixed 表示固定大小线程池(也可选 cached、limited 等)threads: 10                    # 固定线程池的线程数量loadbalance: roundrobin        # 负载均衡策略(此处为提供者端配置,但实际生效于消费者端;# 常见值:roundrobin, random, leastactive, consistenthash)timeout: 5000                  # 默认服务调用超时时间(单位:毫秒),即消费者等待响应的最大时间retries: 3                     # 失败重试次数(不包括首次调用),仅对幂等操作安全;设为 0 表示不重试# 通信协议配置protocol:name: dubbo                    # 使用的协议名称,dubbo 表示使用 Dubbo 协议(基于 TCP + 二进制序列化)port: -1                       # 服务监听端口:# -1 表示由系统自动分配可用端口(推荐,避免端口冲突)# 也可指定具体端口如 20880

✅ 3. 创建启动类

package cn.tcmeta.service;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author: laoren* @description: 启动类* @version: 1.0.0*/
@SpringBootApplication
@EnableDubbo // 启动dubbo3
public class TCDubbo3ProviderApplication {public static void main(String[] args) {SpringApplication.run(TCDubbo3ProviderApplication.class, args);}
}

5.3.5 创建dubbo3的consumer

✅ 1. 引入依赖

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><dubbo3.version>3.3.5</dubbo3.version>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>cn.tcmeta</groupId><artifactId>tc-dubbo3-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-nacos-spring-boot-starter</artifactId><version>${dubbo3.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo3.version}</version></dependency>
</dependencies>

✅ 2. application.yml配置文件

spring:application:name: tc-dubbo3-service-consumerserver:port: 8088# 配置dubbo
dubbo:application:name: tc-dubbo3-consumerid: tc-dubbo3-consumerqos-enable: trueqos-port: 33333#monitor:# protocol: dubbo-registryregistry:address: nacos://localhost:8848register-mode: allconfig-center:address: nacos://localhost:8848metadata-report:address: nacos://localhost:8848protocol:name: dubboport: -1 # 端口不能与dubbo-provider重复, 直接写-1,表示由dubbo启动一个端口consumer:check: falsetimeout: 3000                     # 默认调用超时(毫秒),应与提供者协商一致retries: 0                        # 【关键】非幂等操作必须为 0!幂等操作可设为 1loadbalance: random               # 负载均衡策略:random(默认)比 roundrobin 更均匀lazy: true                        # 【可选】懒加载连接,首次调用才建立连接(减少启动开销)

✅ 3. controller定义

@RestController
@RequestMapping("/api/pub/v1/")
public class UserController {@DubboReferenceprivate IUserService userService;@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return userService.sayHi(name);}
}

✅ 4. 启动类

package cn.tcmeta;import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @author: laoren* @description: TCDubbo3ConsumerApplication* @version: 1.0.0*/
@EnableDubbo
@SpringBootApplication
public class TCDubbo3ConsumerApplication {public static void main(String[] args) {SpringApplication.run(TCDubbo3ConsumerApplication.class, args);}
}

5.4 测试

✅ 1. 启动nacos 2.3.2 版本【测试3.1.0无法注册上服务,可能是操作姿势不对,原因待查】

在这里插入图片描述
在这里插入图片描述

打开nacos后台管理页面: localhost:8848/nacos/index.html

  • 默认用户名称和密码都是: nacos
  • 3.x默认强制鉴权,2.x版本不强制

在这里插入图片描述

✅ 2. 启动provider服务

在这里插入图片描述
在这里插入图片描述

✅ 3. 启动consumer服务

在这里插入图片描述

✅ 4. 请求接口

http://localhost:8088/api/pub/v1/hello?name=想不想看花海盛开,想不想等燕子归来

在这里插入图片描述

至此,整合成功!

5.5 答疑

5.5.1 为什么服务的消费者没有注册为服务实例?

✅ 根本原因:Dubbo 3 默认 不注册消费者.

Dubbo 3.0 开始,为了优化注册中心压力、支持 Service Mesh 架构,默认只注册服务提供者(Provider)消费者(Consumer)不再注册为“服务实例”

📌 Nacos 控制台的“服务列表”只显示“服务提供者”,消费者不会出现在这里. 这是 设计行为,不是 bug。

⚠️ 注意:如果要强制进行注册

  • 这会增加 Nacos 的注册压力(每个消费者都注册一个实例)。
  • 在 Dubbo 3 的“应用级服务发现”模式下,不推荐开启
  • 仅在需要通过 Nacos 直接监控消费者(如某些旧版运维工具依赖)时才启用。

✅ 总结

Dubbo 3 消费者不在 Nacos 服务列表中是正常现象,因为默认只注册提供者。

  • 只要消费者能成功调用服务,且在 Nacos 的“订阅者列表”中可见,就说明一切正常。
  • 如非特殊需求,不要开启 register-consumer: true

5.5.2 关于启动中出现qos端口号冲突问题

✅ qos详细信息参数4.5章节

配置:

dubbo:application:name: tc-dubbo-providerid: tc-dubbo-provider# 【生产关键】开启 QoS(运维调试端口),但建议限制访问 IP 或关闭qos-enable: false                 # 默认 true,生产环境建议关闭,防止未授权访问# qos-accept-foreign-ip: false    # 若开启 QoS,必须设为 false,禁止外网访问# qos-port: 33333                 # QoS 端口(仅当 qos-enable=true 时生效)

5.5.3 配置项

结合spring boot 3.5.6 的配置项.

✅ 1. Spring与Server配置

spring:application:name: your-app-name  # Spring 应用名(用于 Actuator、日志等)server:port: 8080  # 若仅 Dubbo 服务,可设为 -1 禁用 Web 容器

✅ 2. Dubbo 应用级配置(dubbo.application)

配置项默认值说明
name-必填。Dubbo 应用名,注册到注册中心的标识
id同 name应用唯一 ID(通常与 name 一致)
owner-应用负责人(用于治理)
organization-所属组织
qos-enabletrue是否启用 QoS(运维调试端口)
qos-port33333QoS 端口
qos-accept-foreign-ipfalse是否接受外网 IP 访问 QoS(生产务必 false
register-consumerfalse消费者是否注册到注册中心(Dubbo 3 默认不注册)
service-discovery.migrationAPPLICATION_FIRST服务发现模式(APPLICATION_FIRST/ INTERFACE_FIRST)

💡 Dubbo 3 默认使用“应用级服务发现”(Application-Level Service Discovery),更轻量、兼容 Service Mesh。

✅ 3. 注册中心(dubbo.registry)

dubbo:registry:address: nacos://nacos.example.com:8848username: ${NACOS_USERNAME}password: ${NACOS_PASSWORD}group: DUBBO_GROUPtimeout: 10000parameters:namespace: prodregister-mode: instance  # instance / all / interface
配置项说明
address注册中心地址,支持 nacos://、zookeeper:// 等
username/passwordNacos 开启鉴权时必需
group分组隔离(避免不同环境/项目冲突)
namespaceNacos 命名空间(用于多环境隔离)
register-modeinstance(推荐:仅注册应用实例) all:兼容 Dubbo 2

✅ 4. 配置中心(dubbo.config-center)

dubbo:config-center:address: nacos://nacos.example.com:8848group: DUBBO_GROUPnamespace: prodtimeout: 10000
  • 用于动态配置覆盖(如修改超时、权重)。
  • 配置 Key 格式:dubbo.properties(全局)或 应用名:dubbo.properties(应用级)。

✅ 5. 元数据中心(dubbo.metadata-report)

dubbo:metadata-report:address: nacos://nacos.example.com:8848group: DUBBO_GROUPnamespace: prod
  • 存储服务接口、方法、参数等元数据。
  • 消费者通过元数据实现“服务自省”(Service Self-Introspection)。

✅ 6. 协议配置(dubbo.protocol)

dubbo:protocol:name: dubbo        # 协议类型(dubbo / tri / rest 等)port: 20880        # 提供者监听端口(消费者可设为 -1)threads: 200       # 协议级线程数(覆盖 provider 配置)payload: 8388608   # 最大请求包大小(8MB)

🔹 tri 协议(Triple)是 Dubbo 3 推荐的下一代协议,兼容 gRPC。

✅ 7. 服务提供者配置(dubbo.provider)

dubbo:provider:timeout: 5000          # 默认超时(ms)retries: 0             # 重试次数(非幂等操作必须为 0)loadbalance: random    # 负载均衡策略threadpool: fixed      # 线程池类型(fixed / cached / limited)threads: 200           # 线程数queues: 0              # 任务队列大小(0 = 直接拒绝)executes: 1000         # 单方法最大并发执行数serialization: hessian2 # 序列化方式group: my-group        # 服务分组version: 1.0.0         # 服务版本

✅ 8. 服务消费者配置(dubbo.consumer)

dubbo:consumer:check: false           # 启动时是否检查服务可用性(生产建议 false)timeout: 3000          # 默认调用超时retries: 0             # 重试次数loadbalance: random    # 负载均衡策略lazy: true             # 懒连接(首次调用才建立连接)actives: 10            # 每个服务最大并发调用数(防雪崩)cluster: failfast      # 集群容错策略(failover / failfast / failsafe / forking)serialization: hessian2group: my-group        # 必须与提供者一致version: 1.0.0         # 必须与提供者一致

✅ 9. 监控与指标(dubbo.metrics)

dubbo:metrics:protocol: prometheus   # 指标协议port: 9090             # 指标暴露端口enable-jvm: true       # 是否收集 JVM 指标
  • 通过 http://host:9090/metrics 可获取 Prometheus 格式指标。

✅ 10. 日志与调试

dubbo:logger: slf4j          # 日志框架(slf4j / log4j / log4j2)

✅ 11. 生产环境关键建议

项目建议
注册模式register-mode: instance
消费者注册register-consumer: false(默认)
QoSqos-enable: false
重试非幂等接口 retries: 0
超时根据业务 SLA 设置(通常 1~5 秒)
Nacos使用集群地址 + 命名空间 + 分组隔离
安全Nacos 开启鉴权,敏感信息通过环境变量注入
可观测性开启 Metrics + 链路追踪(SkyWalking/Zipkin)
http://www.dtcms.com/a/487389.html

相关文章:

  • 构建AI智能体:六十四、模型拟合的平衡艺术:深入理解欠拟合与过拟合
  • 微能力者恶魔网站谁做的大理市建设局网站
  • 【Go】P5 Go 语言基础:全面解析五大核心运算符
  • zabbix模板,触发器,自动化
  • 景德镇网站建设公司中国空间站结构示意图
  • Citadel OA 面经,从实战解析到备考攻略
  • 莆田市城厢区建设局网站一个做搞笑类视频的网站取名
  • Nacos配置文件如何初始化的
  • 创维E900V22D刷入armbian hdmi开机花屏和网络无法使用 解决方式【亲测】
  • 全面解答:远控快捷键切换方便吗?不同系统间键盘映射设置随需调
  • 互联网门户网站有哪些鞍山市网站建设
  • 【vLLM】源码解读:vllm如何识别到第三方自定义设备的
  • 网站制作的基本成都网站建设网络
  • 日志系统4 日志类型的设计
  • 深度学习:从图片数据到模型训练(十分类)
  • PCB mark点
  • 大兴网站开发网站建设咨询100%能上热门的文案
  • 网站建设douyanet杭州专业建设网站哪里好
  • Mysql杂志(三十二)——redo日志、undo日志
  • 2017做那些网站致富网博士自助建站系统
  • 上海做公司网站的公司室内设计网站模板
  • 化州 网站建设如何自己建营销网站
  • Kafka-2 Docker 部署单节点环境(SpringBoot验证)
  • 从0开始了解kafka《第二篇 kafka的安装、管理和配置》
  • 02 SQL数据检索入门 - SELECT语句详解
  • 从分词器构建到强化学习:nanochat开源项目下载与部署全流程教程,教你一步步训练ChatGPT语言模型
  • 长安镇仿做网站注册网站好的平台
  • 加强公司内部网站建设正邦设计公司
  • 巩义网站建设价格怎么注册个人工作室
  • 四川网站建设益友网站地图怎么用