两个独立的springboot项目可以用dubbo吗,不是spring cloud
  是的,两个独立的 Spring Boot 项目完全可以通过 Dubbo 实现分布式服务调用,无需依赖 Spring Cloud。Dubbo 作为高性能的 RPC 框架,天然支持跨项目的服务暴露与消费,且与 Spring Boot 集成非常简便。以下是具体实现方式和关键步骤:
# 🔧 1. 依赖配置
两个项目均需引入 Dubbo 和注册中心(如 Zookeeper)的依赖:
<!-- Dubbo Starter -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version> <!-- 需与Spring Boot版本匹配 -->
</dependency>
<!-- Zookeeper 客户端 -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.2</version>
</dependency>
 1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
注:Dubbo 与 Spring Boot 版本需兼容(如 Spring Boot 2.0.x 对应 Dubbo Starter 0.2.x)。
# 🛠️ 2. 服务提供方(Provider)配置
项目 A(暴露服务)需完成以下步骤:
- 定义接口:在独立模块(如 
api模块)声明服务接口,供双方共享:public interface UserService { User getUser(Long id); }1
2
3 - 实现接口:在 Provider 项目中实现接口,并用 Dubbo 的 
@Service注解暴露服务:import org.apache.dubbo.config.annotation.Service; @Service // Dubbo 注解,非 Spring 的 @Service public class UserServiceImpl implements UserService { @Override public User getUser(Long id) { return new User(id, "Tom"); } }1
2
3
4
5
6
7
8 - 配置注册中心与协议(
application.properties):# 应用名称 dubbo.application.name=provider-app # 注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # 协议与端口 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 # 扫描 Dubbo 服务包路径 dubbo.scan.base-packages=com.example.provider.service1
2
3
4
5
6
7
8
9 
关键点:
dubbo.protocol.port需唯一,避免端口冲突。
# 🔍 3. 服务消费方(Consumer)配置
项目 B(调用服务)需完成:
- 引用共享接口:引入包含接口定义的 
api模块。 - 通过 
@Reference注入服务:import org.apache.dubbo.config.annotation.Reference; @RestController public class UserController { @Reference // Dubbo 注解,注入远程服务 private UserService userService; @GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { return userService.getUser(id); } }1
2
3
4
5
6
7
8
9
10
11 - 配置注册中心(
application.properties):dubbo.application.name=consumer-app dubbo.registry.address=zookeeper://127.0.0.1:21811
2 
注:消费者无需配置协议端口(
dubbo.protocol.port),因其不暴露服务。
# ⚙️ 4. 注册中心的作用
Dubbo 依赖 注册中心(如 Zookeeper) 实现服务发现:
- 服务提供者启动时:向注册中心注册服务地址(如 
192.168.0.1:20880)。 - 服务消费者调用时:从注册中心获取可用地址,并通过负载均衡策略(如随机、轮询)选择目标服务。
 
# ⚠️ 5. 注意事项
- 接口包路径一致性
提供者与消费者的接口全限定名(含包名)必须完全一致,否则无法匹配。 - 版本管理
若接口迭代,可通过@Service(version="1.0.0")和@Reference(version="1.0.0")明确版本。 - 直连模式(测试用)
绕过注册中心,消费者直连提供者(配置@Reference(url="dubbo://localhost:20880"))。 
# 🌰 6. 项目结构示例
├── dubbo-api         // 公共模块(存放接口和DTO)
│   └── UserService.java
├── dubbo-provider    // 服务提供方(Spring Boot 项目A)
│   ├── UserServiceImpl.java
│   └── application.properties
└── dubbo-consumer    // 服务消费方(Spring Boot 项目B)
    ├── UserController.java
    └── application.properties
 1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 💎 总结
两个独立的 Spring Boot 项目完全可以通过 Dubbo + 注册中心(如 Zookeeper) 实现服务调用。核心流程包括:
- 提供方用 
@Service暴露服务并配置端口; - 消费方用 
@Reference注入接口并连接注册中心; - 双方依赖共享的 API 接口模块。
Dubbo 的轻量化、高性能特性使其成为替代 Spring Cloud 的分布式调用优选方案,尤其适合模块拆分明晰的场景。 
编辑  (opens new window)
  上次更新: 2025/06/24, 00:41:57