04 dubbo服务间的调用,怎么实现的
vvEcho
2026-01-19 20:53:00
Categories:
09 dubbo
Tags:
生产端
1 2 3 4 5 6 7 8 9 10 11 12
| public interface OrderService { OrderResult createOrder(CreateOrderReq req); } @DubboService(version = "1.0.0", timeout = 3000) public class OrderServiceImpl implements OrderService {
@Override public OrderResult createOrder(CreateOrderReq req) { return new OrderResult(); } }
|
扫描DubboService
1.服务启动时,spring扫描 @DubboService注解
2.创建ServiceConfig(服务配置对象)
3.接下来是服务暴露,serviceConfig.export();这个方法内部非常复杂,但逻辑可以压缩成 3 步
- 第一步:注册到注册中心(ZK / Nacos)
- 第二步:启动 Netty Server(监听端口)
- 第三步:本地缓存 Exporter
消费方
1 2 3 4
| @DubboReference private OrderService orderService;
orderService.createOrder(req);
|
Spring 启动时:创建代理
@DubboReference → ReferenceBean
1 2 3 4 5 6
| class OrderServiceProxy implements OrderService { public Result createOrder(Req req) { return invoker.invoke(new RpcInvocation(...)); } }
|
具体流程如下图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @DubboReference ↓ Proxy(JDK / Javassist) ↓ Invoker ↓ Filter(超时 / 重试 / 限流) ↓ Cluster(Failover) ↓ LoadBalance ↓ Netty Client ↓ TCP ↓ Netty Server ↓ Wrapper 调用实现类 ↓ 返回 Result
|