前言
Dubbo 是阿里巴巴开源的高性能 Java RPC 框架,在金融和大型企业级系统中被广泛使用。它提供了服务注册发现、负载均衡、容错和监控等完整的服务治理能力。
1. Dubbo 核心架构
Dubbo 的架构包含五个核心角色:
1 2 3 4 5
| [服务消费者] --调用--> [服务提供者] | | |--订阅--> [注册中心] <--注册--| | [监控中心]
|
- Provider:暴露服务的服务提供方
- Consumer:调用远程服务的服务消费方
- Registry:服务注册与发现中心
- Monitor:统计服务的调用次数和调用时间
- Container:服务运行容器
2. 服务提供者配置
SpringBoot 集成 Dubbo 的 Provider 端配置:
1 2 3 4 5 6 7 8 9 10
| dubbo: application: name: user-service-provider registry: address: nacos://127.0.0.1:8848 protocol: name: dubbo port: 20880 scan: base-packages: com.example.service
|
服务接口需要单独抽出一个公共模块:
1 2 3 4 5
| public interface UserService { UserDTO getUserById(Long id); List<UserDTO> listUsers(int page, int size); }
|
Provider 实现:
1 2 3 4 5 6 7
| @DubboService(version = "1.0.0", timeout = 3000) public class UserServiceImpl implements UserService { @Override public UserDTO getUserById(Long id) { } }
|
3. 服务消费者配置
Consumer 端通过 @DubboReference 注解引用远程服务:
1 2 3 4 5 6 7 8 9 10 11 12
| @RestController @RequestMapping("/api/users") public class UserController {
@DubboReference(version = "1.0.0", check = false, timeout = 5000) private UserService userService;
@GetMapping("/{id}") public ApiResponse<UserDTO> getUser(@PathVariable Long id) { return ApiResponse.success(userService.getUserById(id)); } }
|
4. 注册中心选择
| 注册中心 |
优势 |
适用场景 |
| Nacos |
配置中心一体化 |
新项目首选 |
| Zookeeper |
成熟稳定 |
已有 ZK 基础设施的场景 |
| Redis |
部署简单 |
小规模/开发测试 |
5. 负载均衡策略
| 策略 |
说明 |
| random |
随机(默认),按权重随机 |
| roundrobin |
轮询,按公约权重轮询 |
| leastactive |
最少活跃调用数 |
| consistenthash |
一致性 Hash,相同参数到同一提供者 |
6. 集群容错模式
1 2 3 4 5 6 7 8
| @DubboReference(cluster = "failover", retries = 2)
@DubboReference(cluster = "failfast")
@DubboReference(cluster = "failsafe")
|
7. 服务分组与版本控制
通过分组实现多套环境隔离,通过版本控制支持灰度发布:
1 2 3 4 5
| dubbo: registry: address: nacos://nacos-prod:8848 parameters: group: prod
|
1 2
| @DubboService(version = "1.0.0") @DubboService(version = "2.0.0")
|
总结
Dubbo 通过注册中心、负载均衡、集群容错等机制提供了完善的服务治理能力。实际项目中建议与 Nacos 配合,利用配置中心实现动态配置,通过版本控制实现无缝发布。
8年Java后端开发老兵,专注微服务、容器化、分布式架构。