Dubbo源码解读-DubboInvoker总结和调用流程铺垫

        上篇我们介绍了Exchangeclient初始化,地址如下
Dubbo源码解读-Exchangeclient初始化-CSDN博客

        本文主要针Dubbo消费端DubboInvoker涉及到的知识点进行汇总一下 。方便理解之前ExchangeClient和后面DubboInvoker的调用流程。

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

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

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

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

DubboInvoker总结和调用流程铺垫

  1. DubboInvoker对象初始化时,getClient()创建Client和handler的执行连
    • HeaderExchangeClient-》
  2. 主要类:
    • HeaderExchangeChannel.request():发送请求
    • HeaderExchangeHandler.receive():接受服务端响应
    • DefaultFeature.doReceive():设置response,唤醒get方法
  3. 发起请求是会生成一个流水号ID,即request对象id属性。服务端响应也会带上这个ID
  4. DefaultFeature有两个全局变量
    • FUTURES:请求ID和Feature
    • CHANNELS:请求ID和NettyClient
    • get():阻塞等待
    • doReceive()收到服务端响应,唤醒get()方法
    • callBack.实现消费端回调。
  5. 一个请求,对应一个应答。所有请求创建的defaultFeature保存在DefaultFeature里面。消费端应答时,通过请求流转过程中的ID,获取对应的defaultFeature。再进对get()方法唤醒。
    • request(ID)->defaultFuture<-response(ID)
  6. 消费端链路:
    • 请求链路:HeaderExchangeClient.request()->HeaderExchangeChannel.request()->NettyClient.send()->nettyChannel
    • 响应链路:NettyClientHandler->MultiMessageHandler->HeartbeatHandler->AllChannelHandler->DecodeHandler->HeaderExchangeHandler->defalutFutrue.doReceive()
  7. 服务端链路:
    • 请求链路:HeaderExchangeServer->*->NettyServer->NettyServerHandler
    • 响应链路:NettyServerHandler->MultiMessageHandler->HeartbeatHandler->AllChannelHandler->DecodeHandler->HeaderExchangeHandler->ExchangeHandlerAdapter.reply()->DubboExporter.getInvoker->Invoker执行[Filter1-》Filter2-〉invokerDelegete->AbstractProxyInvoker->wrapper->ServiceClass]
  8. 服务端接收请求和消费端接收响应的入口
    • 消费端:NettyClientHandler.channelRead(),然后调用上面Handler执行链,最后调用defaultfuture.doRecieve()设置response,唤醒get方法
    •  服务端:NettyServerHandler.channelRead(),然后调用上面Handler执行链,接着调用ExchangeHandlerAdapter.reply()方法->找到DubboExport,获取Invoker执行链,挨个调用。最后钓到abstractProxyInvoker持有的被代理对象,也就是对应Service的方法。
  9. 序列化方式:默认Hession(原因:目前为止最稳定且效率最高的)

总结:上面内容中,每个从业务流程和源码角度进行了详细分析,如果大家有疑问或者对文章排版任何方面有建议都可以留言评论,看到都会及时回复大家。

知识总结,分享不易,全文手敲,欢迎大家关注点赞评论收藏。

当然如果觉得文章写的不错,也可点击大赏按钮,深深的鼓励一下博主。哈哈!!!!

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟long

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

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

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

打赏作者

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

抵扣说明:

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

余额充值