Dubbo
2026/1/15大约 2 分钟
Dubbo
概述
Dubbo 是阿里开源的高性能 RPC 框架,提供服务注册、发现、调用、负载均衡等功能。
架构
┌─────────────────────────────────────────────────────────┐
│ Dubbo 架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Consumer │ ──────> │ Provider │ │
│ └──────────┘ └──────────┘ │
│ │ │ │
│ │ ┌──────────┐ │ │
│ └──> │ Registry │ <──┘ │
│ └──────────┘ │
│ │ │
│ ┌──────────┐ │
│ │ Monitor │ │
│ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────┘快速开始
定义接口
// API 模块
public interface UserService {
User getUser(Long id);
List<User> listUsers();
void createUser(User user);
}服务提供者
// Provider 模块
@DubboService(version = "1.0.0")
public class UserServiceImpl implements UserService {
@Override
public User getUser(Long id) {
return userRepository.findById(id).orElse(null);
}
@Override
public List<User> listUsers() {
return userRepository.findAll();
}
@Override
public void createUser(User user) {
userRepository.save(user);
}
}# application.yml
dubbo:
application:
name: user-provider
registry:
address: nacos://localhost:8848
protocol:
name: dubbo
port: 20880
scan:
base-packages: com.example.service服务消费者
// Consumer 模块
@RestController
public class UserController {
@DubboReference(version = "1.0.0")
private UserService userService;
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUser(id);
}
}# application.yml
dubbo:
application:
name: user-consumer
registry:
address: nacos://localhost:8848高级特性
负载均衡
// 随机(默认)
@DubboReference(loadbalance = "random")
// 轮询
@DubboReference(loadbalance = "roundrobin")
// 最少活跃
@DubboReference(loadbalance = "leastactive")
// 一致性哈希
@DubboReference(loadbalance = "consistenthash")集群容错
// 失败自动切换(默认)
@DubboReference(cluster = "failover", retries = 2)
// 快速失败
@DubboReference(cluster = "failfast")
// 失败安全
@DubboReference(cluster = "failsafe")
// 并行调用
@DubboReference(cluster = "forking", forks = 2)服务降级
@DubboReference(mock = "com.example.UserServiceMock")
private UserService userService;
// Mock 实现
public class UserServiceMock implements UserService {
@Override
public User getUser(Long id) {
return new User(-1L, "降级用户");
}
}超时配置
// 方法级别
@DubboService(timeout = 3000, methods = {
@Method(name = "getUser", timeout = 1000),
@Method(name = "listUsers", timeout = 5000)
})
// 消费端
@DubboReference(timeout = 3000)异步调用
// 定义异步接口
public interface UserService {
CompletableFuture<User> getUserAsync(Long id);
}
// 使用
@DubboReference
private UserService userService;
public void asyncCall() {
CompletableFuture<User> future = userService.getUserAsync(1L);
future.whenComplete((user, throwable) -> {
if (throwable != null) {
// 处理异常
} else {
// 处理结果
}
});
}泛化调用
// 不依赖接口,动态调用
@DubboReference(interfaceClass = GenericService.class, generic = true)
private GenericService genericService;
public Object invoke() {
return genericService.$invoke(
"getUser",
new String[]{"java.lang.Long"},
new Object[]{1L}
);
}服务治理
路由规则
# 条件路由
conditions:
- "host = 192.168.1.* => host = 192.168.1.*"
- "method = getUser => host = 192.168.1.1"动态配置
# 覆盖规则
configVersion: v2.7
scope: service
key: com.example.UserService
enabled: true
configs:
- side: consumer
parameters:
timeout: 5000完整配置
dubbo:
application:
name: user-service
qos-enable: false
registry:
address: nacos://localhost:8848
timeout: 10000
protocol:
name: dubbo
port: 20880
threads: 200
provider:
timeout: 3000
retries: 0
loadbalance: random
consumer:
timeout: 3000
retries: 2
check: false
scan:
base-packages: com.example.service