dubbo源码分析-consumer 发送与接收原理

本文详细分析了Dubbo消费者端的发送与接收原理。从consumer发送扩展开始,探讨了consumer发送请求的过程,包括接口参数设置、调用模式(同步、异步、oneway)以及网络数据发送。接着,解释了consumer接收响应的流程,涉及Socket通信、NettyHandler、DecodeHandler和HeaderExchangeHandler等关键组件。最后,讨论了Dubbo如何将异步响应转化为同步请求的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、consumer 发送扩展

我们先来看一下 dubbo 中 consumer 端的请求发送原理,也就是从 InvokerWrapper#invoke 开始,在 consumer 服务引用分析的时候,我们知道根据 Invoke 调用的时候, dubbo 会创建 ProtocolListenerWrapper与 ProtocolFilterWrapper 来用集成框架使用者的扩展包含:InvokerListener 与 FilterProtocolListenerWrapper 在对象创建的时候就会调用InvokerListener#referred扩展,所以在远程服务调用的时候最主要的还是 Filter 扩展(ConsumerContextFilter FutureFilter MonitorFilter)

2、consumer 发送原理

最终 consumer 会到 DubboInvoke 进行服务调用。它会在 AbstractInvoker#invoke 添加一些扩展参数到 RpcInvocation 这个远程调用对象里面。添加的扩展参数包含:

  • interface : 远程调用的接口名称
  • group : 接口分组名称
  • token : 调用的 token 信息
  • timeout : 调用服务的超时时间
  • async : 是否异步调用
  • id : 异步操作默认添加 invocation id,用于保证操作幂等

以及 RpcContext 传递过来的扩展参数(RpcContext#attachments)。然后在 DubboInvoker#doInvoke 中会添加 path (接口全类名) 以及 version(版本信息)。再根据 dubbo 的调用模式进行远程调用,包含以下三种调用模式:

  • oneway 模式:<dubbo:method>标签的 return 属性配置为false,则是oneway模式,利用ExchangeClient 对象向服务端发送请求消息之后,立即返回空 RpcResult 对象
  • 异步模式:<dubbo:method>标签的 async 属性配置为 ture,则是异步模式,直接返回空 RpcResult对象,由 FutureFilter 和 DefaultFuture 完成异步处理工作
  • 同步模式:默认即是同步,则发送请求之后线程进入等待状态,直到收到服务端的响应消息或者超时。

下面我们看一下 dubbo 同步调用时序图:

DubboInvoke.png

ChannelFuture future = channel.write(message);
  •  

最终是调用 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值