Spring Boot 集成 Dubbo 的核心是接口抽象、注解驱动与注册中心协同,需拆分为 dubbo-common(纯接口/DTO)、dubbo-provider(@DubboService 实现)、dubbo-consumer(@DubboReference 调用)三个独立模块,依赖 dubbo-spring-boot-starter 3.2.14,配置 zookeeper 注册中心及协议,严格遵循版本匹配与注解规范。

Spring Boot 集成 Dubbo 的核心是“接口抽象 + 注解驱动 + 注册中心协同”,不是简单加依赖就能跑通,关键在模块职责清晰、配置对齐、注册中心可用。
明确三模块分工
必须拆成三个独立 Maven 模块(不能写在一个工程里):
-
dubbo-common:只放接口定义(如
UserService)和 DTO/POJO,不依赖 Spring 或 Dubbo,供 provider 和 consumer 共享 -
dubbo-provider:Spring Boot 项目,实现
dubbo-common中的接口,用@DubboService暴露服务,依赖 ZooKeeper 或 Nacos 客户端 -
dubbo-consumer:另一个 Spring Boot 项目,通过
@DubboReference引用远程接口,处理 Web 请求(如 Controller 调用 UserService)
依赖与版本要匹配
推荐使用官方维护的 dubbo-spring-boot-starter(非旧版 com.alibaba.spring.boot:dubbo-spring-boot-starter):
- Dubbo 3.x 对应 Spring Boot 2.6+ / 3.x,starter 坐标为:
<groupid>org.apache.dubbo</groupid><br><artifactid>dubbo-spring-boot-starter</artifactid><br><version>3.2.14</version>
- ZooKeeper 用
curator-x-recipes(4.7+),Nacos 用spring-cloud-starter-alibaba-nacos-discovery(2022+ 版本) - provider 和 consumer 模块都要引入 starter,common 模块不引入任何框架依赖
配置注册中心与协议
以 ZooKeeper 为例,在 application.yml 中写清基础信息:
-
dubbo.application.name:必须设,且 provider/consumer 不同名(如user-provider/user-consumer) -
dubbo.registry.address:格式为zookeeper://127.0.0.1:2181,确保 ZooKeeper 已启动并可连通 -
dubbo.protocol.name和port:provider 必须配(默认 dubbo 协议 + 20880),consumer 可不配 -
dubbo.scan.base-packages:provider 中指定含@DubboService的包路径;consumer 中可省略(@DubboReference会自动代理)
代码写法要规范
避免常见错误写法:
- 接口定义在 common 模块中,不能带 Spring 注解(如
@Service),纯 Java interface - provider 实现类用
@DubboService(version = "1.0.0"),不是@Service(老教程易错) - consumer 中注入时用
@DubboReference(version = "1.0.0"),不是@Autowired直接注入接口 - Controller 层调用的是注入的代理对象,不是本地 new 实例
跑通的关键顺序:先启 ZooKeeper/Nacos → 再启 provider(看日志是否有 “Exporting service”)→ 最后启 consumer(看日志是否有 “Referencing service”)。只要注册中心连得上、接口包路径扫得准、版本号对得齐,调用就自然成立。











