Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

21|调用流程:消费方的调用流程体系,你知道多少?

你好,我是何辉。今天我们深入研究 Dubbo 源码的第十篇,调用流程。
在消费方这样的代码你一定见过很多了。
@DubboReference
private DemoFacade demoFacade;
在 Spring Bean 中定义 Dubbo 接口为成员变量时,用 @DubboReference 注解修饰 DemoFacade。
你有没有好奇过,我们现在看到的这个 demoFacade 变量,在内存运行时,值类型还属于 DemoFacade 这个类型么?如果不是,那拿着 demoFacade 变量去调用里面的方法时,在消费方到底会经历怎样的调用流程呢?
这个问题,我以前也探索过,不过因为源码太复杂,最后都徒劳无功。直到有一天,遇到了一位资深大佬,指点了我看源码的 12 字方针:不钻细节:只看流程;不看过程:只看结论;再看细节:再看过程。参考他的经验,我经过一番简单的调试后,就轻松梳理出了调用流程的大体框架。
今天我就带你按照这 12 字方针的思路,感受一下高手是如何研究源码流程的。每个环节,我会用图片总结,加强你对流程的形象化理解。今天的内容稍微多一些,做好准备,我们马上开始。

sayHello 调试

先来看下我们的消费方调用代码。
///////////////////////////////////////////////////
// 消费方的一个 Spring Bean 类
// 1、里面定义了下游 Dubbo 接口的成员变量,并且还用 @DubboReference 修饰了一下。
// 2、还定义了一个 invokeDemo 方法被外部调用,但其重点是该方法可以调用下游的 Dubbo 接口
///////////////////////////////////////////////////
@Component
public class InvokeDemoService {
// 定义调用下游接口的成员变量,
// 并且用注解修饰
@DubboReference
private DemoFacade demoFacade;
// invokeDemo 是被外部触发调用的,不过这不是重点,
// 重点的是该 invokeDemo 逻辑中能调用下游的接口,
// 这里调用的是下游 DemoFacade 接口的 sayHello 方法
public String invokeDemo(){
return demoFacade.sayHello("Geek");
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入研究了Dubbo源码中消费方的调用流程,通过调试消费方代码为切入点,探索了调用流程的底层逻辑。首先介绍了JDK代理的使用,探讨了代理对象中的targetSource和interfaces成员变量的作用,并展示了Dubbo框架对JDK代理触发调用的入口和迁移兼容调用器的处理。接着分析了InvokerInvocationHandler的invoke方法,以及MigrationInvoker和MockClusterInvoker的调用逻辑,展示了Dubbo框架的灵活性和可扩展性。通过深入分析Dubbo源码,为读者呈现了Dubbo框架底层逻辑的精华,对于想深入了解Dubbo源码的技术人员具有重要参考价值。文章还提到了通过调试Dubbo源码,深入探讨了Dubbo框架底层逻辑,对于想深入了解Dubbo源码的技术人员具有重要参考价值。文章内容详实,对于想深入了解Dubbo源码的技术人员具有重要参考价值。文章还列举了三个典型的调试案例,包括Tomcat容器接收请求流程、SpringMvc处理请求的流程和Spring的getBean方法,鼓励读者通过调试分析出调用流程。最后,总结了跟踪源码的12字方针,提出了思考题,引导读者进一步研究消费方进行泛化调用时会经历哪些流程,以及泛化调用的底层实现。文章内容丰富,适合对Dubbo源码感兴趣的技术人员深入学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • Lum
    读完后感觉心态有点炸,有点纠结这一步步的invoker是怎么组装起来的,dubbo太复杂了。

    作者回复: 你好,Lum:这个就是Dubbo的精髓之处,关键你还是得去理解思考,这么多的Invoker在逐步解决什么问题,就好像每个Invoker各自为政一样,试图在自己范围内把这一块局部问题解决。

    2023-03-02归属地:北京
    2
    2
  • 张小凡
    dubbo invoker如何理解?

    作者回复: 你好,张小凡:我是这么理解的,有 4 点如下: 1、字面层面:就是 invoke 调用加了一个 r,意指调用者; 2、代码层面:就是一个个实体对象,实体对象之间有着相互的调用关系; 3、功能层面:每个调用者都体现了它们各自单独层次模块的作用,做聚焦细粒度的事情; 4、复用层面:若你想使用某个层次的调用者的话,可以通过继承或组合方式来达到你的诉求;

    2023-03-07归属地:浙江
  • Wallace Pang
    "不钻细节,只看流程;不看过程,只看结论;再看细节,再看过程" 16字方针

    作者回复: 你好,Wallace Pang:感谢发现了细节问题,点赞~ 可能是编写是遗忘了标点符号, 不钻细节:只看流程; 不看过程:只看结论; 再看细节:再看过程。 这样才是12字方针。

    2023-02-23归属地:上海
  • Nights
    InvokerInvocationHandler》MigrationInvoker》MockClusterInvoker》FailoverClusterInvoker》DubboInvoker 这个 invoker 调用链路是怎么看出来的?

    作者回复: 你好,Nights:在文章开头就提到了,通过 Debug 方式来探索的。 原文开头一段话如下: 那怎么展开探索呢?我们以 Debug 的方式调试消费方,在 sayHello 方法打个断点,通过断点调试,钻进调用流程的各个环节,同时参考12字方针,深入研究调用流程的底层逻辑。

    2023-02-06归属地:北京
    2
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部