Skip to content

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 和链路追踪