Dubbo
简介
Apache Dubbo 是阿里巴巴开源的高性能 Java RPC 框架,提供服务注册、发现、负载均衡、流量治理等微服务核心能力。
核心架构
Provider ──注册服务──> Registry ──发现服务──> Consumer
↑ │ │
└───── 直连调用 ────────┘ │
│
Consumer ──负载均衡──> Provider (集群)基本使用
服务接口定义
java
public interface UserService {
User getUserById(Long id);
List<User> listUsers(int page, int size);
}服务提供者
java
@Service // Dubbo 的 @Service 注解
public class UserServiceImpl implements UserService {
@Override
public User getUserById(Long id) {
return new User(id, "张三", 25);
}
@Override
public List<User> listUsers(int page, int size) {
return userMapper.selectPage(page, size);
}
}yaml
# application.yml(提供者)
dubbo:
application:
name: user-provider
registry:
address: zookeeper://localhost:2181
protocol:
name: dubbo
port: -1 # 随机端口服务消费者
java
@DubboReference
private UserService userService;
public void doBusiness() {
User user = userService.getUserById(1L);
System.out.println(user.getName());
}yaml
# application.yml(消费者)
dubbo:
application:
name: user-consumer
registry:
address: zookeeper://localhost:2181高级特性
负载均衡策略
java
@DubboReference(loadbalance = "roundrobin")
private UserService userService;内置策略:Random(随机)、RoundRobin(轮询)、LeastActive(最少活跃)、ConsistentHash(一致性哈希)
集群容错
java
@DubboReference(cluster = "failover", retries = 2)
private UserService userService;| 策略 | 说明 |
|---|---|
| failover | 失败自动切换(默认) |
| failfast | 快速失败 |
| failsafe | 失败忽略 |
| fork | 并行调用多个 |
| broadcast | 广播调用所有 |
服务治理
- 流量控制:通过权重、限流控制服务流量
- 服务降级:设置 mock 值,服务不可用时返回降级结果
- 动态配置:运行时调整超时、重试等参数
- 服务监控:集成 Metrics 和链路追踪