Dubbo源码解读-消费端DubboInvoker的调用流程解析

上篇我们介绍了ExchangeClient初始化原理,地址如下

Dubbo源码解读-Exchangeclient初始化-优快云博客

       本文主要针Dubbo消费端调用流程中,DubboInvoker的调用流程,从dubbo源码角度进行解析。

        大家可以好好仔细读一下本文。有疑问欢迎留言。

        接着说明,读Dubbo源码最好是先对Spring源码有一定的了解。如果大家需要,我也可以针对Spring框架做一系列源码的解读专栏。

         不过不用担心,如果需要Spring的源码知识,文章中也会进行Spring源码铺垫介绍的。

        如果内容中有没描述清楚的,或者大家在阅读源代码有疑问的,欢迎留言,看到就会及时回复。

主要内容

  • 关联知识介绍
  • DubboInvoker的调用流程解析
  • 图解调用流程

关联知识介绍

  • 消费端调用流程

        消费端依赖注入服务端后,当消费端请求服务端时,调用流程为:MockClusterInvoker->FailOverClusterInvoker->DubboInvokerr.doInvoke().最终回调DubboInvoker类。DubboInvoker调用前的详细流程可跳转至   

https://mp.youkuaiyun.com/mp_blog/creation/editor/138048991

DubboInvoker.doInvoker的调用流程解析

概括流程

        MockClusterInvoker.invoke->FailOverClusterInvoker.invoke->DubboInvoker.doInvoke()

流程总结如下:

  1. 单工通信:消费端注解配置。method:isReturn=false;
    1. 不需要返回值,减少一次服务端给客户端响应的TCP通信
    2. 不需要创建DefaultFeature
  2. 异步处理:
    1. netty本来就是异步通信,不等待返回结果。返回ResponseFuture设置到Rpc上下文。
    2. 需要返回结果时,调用ResponseFuture.get()阻塞等待即可
  3. 双端通信(消费端分两个流程发送请求和接受服务端应答)
    1. 发送请求:(clinet链负责发送请求)
      1. headerExchangeChannel.request():
        1. 创建DefaultFuture类并返回,调用NettyClient发送请求.
          1. DefaultFuture:持有持有FUTURES:请求ID和Feature
          2. CHANNELS:请求ID和NettyClient。
      2. 调用default.get()进行阻塞等待。
    2. 接受应答:(Handler链负责接受请求或者应答)
      1. 服务端有数据返回时,回调用NettyClientHandler.channelRead()方法。
      2. 开始调用Handler的执行链。
        1. HeartbeatHandler:发送心跳应答
        2. AllChannelHandler:服务隔离思想,获取线程池异步执行
        3. DecodeHandler:编解码,Hession进行反序列化
        4. HeaderExchangeHandler:
          1. 服务端:
            1. 双工通信:处理请求,调用Filter执行链,最终调用Service方法。并将结果通过channel返回给客户端。
            2. 单工通信:直接处理请求
          2. 消费端:
            1. 根据请求ID获取对应的defaultFuture
            2. 设置Response
            3. 唤醒get方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值