目录

  • 1、消费端动态代理生成流程
  • 2、生产端动态代理生成流程
  • 3、服务注册到zookeeper
  • 4、从zookeeper订阅服务
  • 5、NettyServer启动流程
  • 6、NettyClient启动流程
  • 7、LoadBalance负载均衡初始化流程
  • 8、dubbo rpc异步调用流程
  • 9、dubbo的调用类型种类
  • 10、dubbo的负载均衡种类
  • 11、ExtensionLoader扩展入口
  • 12、NettySever转发请求给业务线程池代码入口
  • 13、dubbo编解码代码入口
  • 14、route chain的构建代码入口
  • 15、filter chain的构建代码入口

dubbo版本:3.0.13-SNAPSHOT
dubbo分支:3.0
github克隆:git clone https://github.com/apache/dubbo.git
注意事项:由于curator框架和zookeeper框架的版本兼容导致连接zookeeper失败,需要降低zookeeper的版本

<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.12</version>
</dependency>

1、消费端动态代理生成流程

org.apache.dubbo.config.ReferenceConfig#init
==================================》
org.apache.dubbo.config.ReferenceConfig#createProxy
==================================》
org.apache.dubbo.config.ReferenceConfig#createInvokerForRemote
==================================》
org.apache.dubbo.registry.integration.RegistryProtocol#refer
==================================》
org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper#getProxy(org.apache.dubbo.rpc.Invoker<T>)
==================================》
org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper#getProxy(org.apache.dubbo.rpc.Invoker<T>, boolean)
==================================》
org.apache.dubbo.rpc.proxy.AbstractProxyFactory#getProxy(org.apache.dubbo.rpc.Invoker<T>, boolean)
==================================》
org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory#getProxy
==================================》
new InvokerInvocationHandler(invoker)

2、生产端动态代理生成流程

org.apache.dubbo.config.ServiceConfig#doExportUrl
==================================》
proxyFactory.getInvoker(ref, (Class) interfaceClass, url);
==================================》
org.apache.dubbo.rpc.ProxyFactory$Adaptive#getInvoker
==================================》
org.apache.dubbo.rpc.proxy.wrapper.StubProxyFactoryWrapper#getInvoker
==================================》
org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory#getInvoker
==================================》
new AbstractProxyInvoker<T>(proxy, type, url)

3、服务注册到zookeeper

org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doRegister

4、从zookeeper订阅服务

org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#doSubscribe

5、NettyServer启动流程

org.apache.dubbo.remoting.transport.netty4.NettyServer#NettyServer
==================================》
org.apache.dubbo.remoting.transport.AbstractServer#AbstractServer
==================================》
org.apache.dubbo.remoting.transport.netty4.NettyServer#doOpen
==================================》
org.apache.dubbo.remoting.transport.netty4.NettyServer#initServerBootstrap

6、NettyClient启动流程

org.apache.dubbo.remoting.transport.netty4.NettyClient#NettyClient
==================================》
org.apache.dubbo.remoting.transport.AbstractClient#AbstractClient
==================================》
org.apache.dubbo.remoting.transport.netty4.NettyClient#doOpen
==================================》
org.apache.dubbo.remoting.transport.netty4.NettyClient#initBootstrap

7、LoadBalance负载均衡初始化流程

org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker#invoke
==================================》
LoadBalance loadbalance = initLoadBalance(invokers, invocation);
==================================》
org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker#initLoadBalance

8、dubbo rpc异步调用流程

org.apache.dubbo.rpc.protocol.AbstractInvoker#doInvokeAndReturn
==================================》
org.apache.dubbo.rpc.protocol.dubbo.DubboInvoker#doInvoke
==================================》ExecutorService executor = getCallbackExecutor(getUrl(), inv);==================================》
org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeChannel#request(java.lang.Object, int, java.util.concurrent.ExecutorService)==================================》channel.send(req);

9、dubbo的调用类型种类

1、FailfastClusterInvoker:快速失败,报错后直接抛异常
2、FailoverClusterInvoker:故障转移,重试可用的所有机器
3、FailbackClusterInvoker:定时重试,失败后通过定时任务再次执行
4、FailsafeClusterInvoker:安全失败,报错后不抛异常,返回空对象
5、ForkingClusterInvoker:并行多路调用,谁先返回就用谁的结果
6、BroadcastClusterInvoker:广播调用,遍历调用所有机器

10、dubbo的负载均衡种类

1、RandomLoadBalance:基于权重的随机负载均衡
2、RoundRobinLoadBalance:基于复杂权重计算的轮询
3、LeastActiveLoadBalance:基于最小活跃的负载均衡算法
4、ConsistentHashLoadBalance:基于虚拟环的一致性hash算法

11、ExtensionLoader扩展入口

1、@SPI注解加载入口:org.apache.dubbo.common.extension.ExtensionLoader#getExtension(java.lang.String)
2、@Adaptive注解加载入口:
org.apache.dubbo.common.extension.ExtensionLoader#getAdaptiveExtension
3、@Activate注解加载入口:
org.apache.dubbo.common.extension.ExtensionLoader#getActivateExtension(org.apache.dubbo.common.URL, java.lang.String)

12、NettySever转发请求给业务线程池代码入口

org.apache.dubbo.remoting.transport.dispatcher.all.AllChannelHandler#received

13、dubbo编解码代码入口

1、编码入口
org.apache.dubbo.remoting.exchange.codec.ExchangeCodec#encodeRequest
2、解码入口
org.apache.dubbo.remoting.exchange.codec.ExchangeCodec#decode(org.apache.dubbo.remoting.Channel, org.apache.dubbo.remoting.buffer.ChannelBuffer)

14、route chain的构建代码入口

org.apache.dubbo.registry.integration.RegistryProtocol#doCreateInvoker
==================================》
directory.buildRouterChain(urlToRegistry);
==================================》
org.apache.dubbo.registry.integration.DynamicDirectory#buildRouterChain
==================================》
org.apache.dubbo.rpc.cluster.RouterChain#buildChain

15、filter chain的构建代码入口

org.apache.dubbo.registry.integration.RegistryProtocol#doCreateInvoker
==================================》
(ClusterInvoker<T>) cluster.join(directory, true);
==================================》
org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster#join
==================================》
org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster#buildClusterInterceptors
==================================》
org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster.ClusterFilterInvoker#ClusterFilterInvoker
==================================》
org.apache.dubbo.rpc.cluster.filter.DefaultFilterChainBuilder#buildClusterInvokerChain

dubbo核心源码流程分析相关推荐

  1. Dubbo核心源码之SPI扩展

    本文来说下Dubbo核心源码之SPI扩展 文章目录 概述 Java中SPI机制详解 Dubbo SPI扩展 扩展功能介绍 扩展源码分析 ExtensionLoader初始化 配置文件扫描 扩展适配器 ...

  2. Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...

  3. springmvc-4.3.7.RELEASE核心源码断点分析

    springmvc请求执行流程 springmvc核心源码 核心方法:DispatcherServlet.doDispatcher 该方法控制着springmvc处理和响应请求的核心流程,源码和注释如 ...

  4. SpringCloud Alibaba——精读Nacos+CMDB+核心源码阅读(7w字长篇)

    文章目录 Nacos 1.介绍 2.使用场景 2.1.动态配置服务 2.2.服务发现及管理 2.2.1.服务注册 2.2.2.服务心跳 2.2.3.服务同步 2.2.4.服务发现 3.环境搭建 3.1 ...

  5. Android框架源码分析——从设计模式角度看 Retrofit 核心源码

    Android框架源码分析--从设计模式角度看 Retrofit 核心源码 Retrofit中用到了许多常见的设计模式:代理模式.外观模式.构建者模式等.我们将从这三种设计模式入手,分析 Retrof ...

  6. halfstone 原理_HashMap的结构以及核心源码分析

    摘要 对于Java开发人员来说,能够熟练地掌握java的集合类是必须的,本节想要跟大家共同学习一下JDK1.8中HashMap的底层实现与源码分析.HashMap是开发中使用频率最高的用于映射(键值对 ...

  7. 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...

  8. RocketMQ源码系列(一) NameServer 核心源码解析

    目录 一.NameServer 介绍 二.NameServer 功能列表 三.NameServer 架构分析 四.NameServer 工程目录解析 五.NameServer 启动流程分析 1)  创 ...

  9. HTTP流量神器Goreplay核心源码详解

    摘要:Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写. 本文分享自华为云社区<流量回放工具之 goreplay 核心源码分析> ...

最新文章

  1. [转载]给IT人员支招:如何跟业务部门谈需求分析?
  2. 编程之美-判断两个链表是否相交方法整理
  3. tomcat启动占了12g_windows server tomcat服务器部署内存占用高问题
  4. 电脑管家离线安装包_二号线、南延线TVM病毒客户端离线处理方法
  5. python replace函数 成功 失败_请教下调用python string模块的replace方法出错的原因
  6. [css] 为什么说css中能用子代选择器的时候不要用后代选择器?
  7. 数据产品-核心能力学习
  8. leetcode - 98. 验证二叉搜索树
  9. 关于laravel模板中生成URL的几种模式总结
  10. 转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]
  11. melt函数_熊猫的melt()和使用pivot()函数取消融化
  12. golang mysql scan_在Golang中对MySQL进行操作
  13. tkinter 中给某个文本加上滚动条_Python Tkinter自制文本编辑器
  14. GridView控件事件详解
  15. CAN Ape 标定与诊断
  16. 布谷鸟算法的一些个人整理
  17. express文件上传中间件Multer详解
  18. Nginx报错:nginx: [error] invalid PID number in /run/nginx.pid 解决方法
  19. java变量不声明可以直接使用吗_Java基础_变量的声明与使用
  20. ArcGIS for Android 100.3.0(10):Callout的使用

热门文章

  1. XML里的<![CDATA[<=]]>是什么意思?
  2. Java ScriptEngineManager
  3. Ipv6上Ipv4的方法
  4. 概率统计-方差与正态分布(高斯分布)
  5. 花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
  6. 使用directives进行拖拽
  7. php生成小程序二维码出现40001的情况
  8. SSL安全连接是什么意思?HTTPS安全登录指的什么?
  9. 全网最全关闭小米手机MIUI系统广告教程
  10. 前端Vue页面加水印方法(带源码)