两个独立的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.service
1
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:2181
1
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