Dubbo
Apache Dubbo 是阿里巴巴开源的高性能 Java RPC 框架 ,提供服务注册发现、负载均衡、容错、流量治理等完整微服务能力,支持多协议(Dubbo、Triple/gRPC、REST)。
整体架构
┌──────────┐ 1.注册 ┌──────────────┐
│ Provider │──────────────►│ Registry │
│ (服务端) │ │(Nacos/Zk等)│
└──────────┘ └──────┬───────┘
▲ │ 2.订阅/通知
│ 4.invoke(RPC调用) ▼
│ ┌──────────────┐
┌──────────┐ 3.refer │ Consumer │
│ Monitor │◄──────────────│ (调用方) │
│(监控中心)│ └──────────────┘
└──────────┘
角色 职责 Provider 服务提供方,暴露接口 Consumer 服务消费方,调用远程接口 Registry 注册中心,维护服务地址列表 Monitor 统计调用次数、响应时间
支持协议
协议 说明 适用场景 Dubbo 默认,单一长连接,NIO Java 内部服务,高并发小包 Triple 兼容 gRPC(HTTP/2 + Protobuf) 跨语言、与 gRPC 互通 REST HTTP/JSON 对外暴露、前端调用
快速开始
定义接口(API 模块)
public interface OrderService {
Order getOrder (Long orderId );
List< Order > listByUser (Long userId );
}
Provider 端
< dependency >
< groupId >org.apache.dubbo</ groupId >
< artifactId >dubbo-spring-boot-starter</ artifactId >
< version >3.x.x</ version >
</ dependency >
@ DubboService ( version = "1.0" , group = "order" )
public class OrderServiceImpl implements OrderService {
@ Override
public Order getOrder (Long orderId ) { ... }
}
dubbo :
application :
name : order-provider
registry :
address : nacos://127.0.0.1:8848
protocol :
name : dubbo
port : 20880
Consumer 端
@ Component
public class OrderClient {
@ DubboReference ( version = "1.0" , group = "order" ,
loadbalance = "roundrobin" ,
timeout = 3000 , retries = 2 )
private OrderService orderService;
public Order query (Long id ) {
return orderService. getOrder (id);
}
}
负载均衡策略
策略 说明 配置值 随机(默认) 按权重随机选择 random轮询 按权重轮询 roundrobin最少活跃调用 选最少并发的提供者 leastactive一致性 Hash 相同参数打到同一节点 consistenthashP2C 两次随机取最优 p2c
容错机制
机制 说明 适用场景 Failover(默认) 失败重试其他节点 读操作 Failfast 失败立即报错 写操作(防重复) Failsafe 失败忽略,返回空 日志、通知等非关键 Failback 失败后台定时重试 消息通知 Forking 并行调用多节点,取最快响应 实时性要求高 Broadcast 广播所有节点 缓存刷新
@ DubboReference ( cluster = "failfast" , retries = 0 )
private OrderService orderService;
服务治理
路由规则(条件路由)
# 将 gray=true 的请求路由到 tag=gray 的 Provider
conditions :
- from :
match : gray=true
to :
match : tag=gray
流量权重(灰度发布)
# 90% 流量到 v1,10% 到 v2
- match :
attachments :
traffic-split : v2
route :
- weight : 10
match : version=2.0
Triple 协议(gRPC 兼容)
dubbo :
protocol :
name : tri # 使用 Triple 协议
port : 50051
Triple 基于 HTTP/2,可与标准 gRPC 客户端互操作,并支持流式调用:
@ DubboService
public class OrderServiceImpl implements OrderService {
public void listStream (Long userId , StreamObserver< Order > observer ) {
orders. forEach (observer :: onNext);
observer. onCompleted ();
}
}
相关链接