dubbo系列二、dubbo请求流程记录
1.dubbo请求处理流程
dubbo是个rpc框架,本质就是socket通信,把客户端的请求信息进行编码为二进制,然后通过socket发送数据。服务端接收二进制数据,解码,进行业务逻辑处理。过程涉及较多,记录如下。
1.1. consumer端处理流程
1.远程调用入口是InvokerInvocationHandler
2.根据调用的methodName,从注册表RegistryDirectory.methodInvokerMap缓存获取Invoker集合(服务方)。这些Invoker集合是consumer启动或服务端服务有变动,监听zk节点生成的。
3.使用路由进行过滤,获取过滤后的Invoker集合。默认是路由是MockInvokersSelector,TagRouter
4.使用负载均衡策略,从上步中的Invoker集合选取一个Invoker,后续就会请求这个具体的服务方
5.consumer端filter chain执行。通常dubbo默认[ConsumerContextFilter,FutureFilter,MonitorFilter]。如果是泛化调用filter chain[ConsumerContextFilter,FutureFilter,MonitorFilter,GenericImplFilter]。filter chain作用是在请求前做一些公共处理,通常我们工作中最经常扩展这个
6.Invoker执行调用。执行的是DubboInvoker.invoker(),该Invoker封装了NettyClient,可以进行网络通信
7.netty调用,进行网络编码,然后发送数据
8.使用Future模式进行同步等待,直至获取响应数据或超时
9.DefaultFuture阻塞等待provider响应结果
10.netty遍历selectionkey,read事件,进行解码,接着使用NettyClientHandler读取接收数据
11.使用HeartbeatHandler进行接收处理数据,封装Response为ChannelEventRunnable,交由dubbo线程池异步处理。注意:HeartbeatHandler是网络发送和接收的入口
12.ChannelEventRunnable处理接收事件,根据Response里面的唯一id获取DefaultFuture,把响应数据Response保存到DefaultFuture,同时唤醒DefaultFuture。即唤醒第8步。
13.DefaultFuture阻塞被唤醒,获取到响应结果(响应结果在第12步已经被保存到DefaultFuture),返回业务数据,至此结束。
1.2.provider端处理流程
1.nettyServer接收consumer端请求数据,进行解码
2.dubbo层数据接入入口是HeartbeatHandler,封装请求信息为ChannelEventRunnable,使用dubbo线程池异步处理
3.ChannelEventRunnable处理Request,根据请求数据内的group+interfaceName+version+port从缓存DubbotProtocol.exporterMap获取服务暴露对象DubboExporter,继而获取provider端Invoker对象
4.Invoker执行,先经过filte chain,然后最终调用目标服务执行业务逻辑
5.把业务执行结果封装为Response,使用netty进行网络通信返回数据。
1.3.dubbo请求分析记录-图
画了泳道图和xmind,以后不会再遗忘了
泳道图

xmind图

dubbo请求xmind原图https://gitee.com/yulewo123/mdpicture/blob/master/document/dubbo/dubbo请求流程.xmind
2.dubbo请求核心说明
1.consumer端的注册表RegistryDirectory,集群策略,负载均衡策略
2.filter chain,这个我们常用于扩展
3.dubbo的netty模型,可以直接拆出来作为一个基础框架使用了
后续一一写下文章
dubbo系列二、dubbo请求流程记录的更多相关文章
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参
[转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...
- dubbo系列二:dubbo常用功能总结
准备工作: (1)启动zookeeper作为dubbo的注册中心 (2)新建一个maven的生产者web工程dubbo-provider-web和一个maven的消费者web工程dubbo-consu ...
- dubbo系列二、dubbo+zookeeper+dubboadmin分布式服务框架搭建(windows平台)
一.zookeeper配置中心安装 1.下载安装包,zookeeper-3.4.6.tar.gz 2.解压安装包,修改配置文件 参考zookeeper-3.4.6/conf/zoo_sample.cf ...
- Dubbo学习(二) Dubbo 集群容错模式-负载均衡模式
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- ASP.NET MVC学习系列(二)-WebAPI请求
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- ASP.NET MVC学习系列(二)-WebAPI请求(转)
转自:http://www.cnblogs.com/babycool/p/3922738.html 继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的g ...
- dubbo学习 二 dubbo源码大致查阅
源码的解析在官网都已经写的非常详细,可以参考:http://dubbo.io/Developer+Guide-zh.htm 服务提供者暴露一个服务的详细过程 首先ServiceConfig类拿到对 ...
- ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...
- Elasticsearch 学习二(请求流程).
一.写入数据 1.ES 的任意节点都可以作为协调(Coordinating)节点接受请求(包括新建.索引或者删除请求),每个节点都知道集群中任一文档位置: 2.协调节点会通过 routing 字段计算 ...
随机推荐
- centos7 ssh 提示/bin/bash No such file or directory 【ldd命令理解】
现象:客户报障ssh无法登陆.提示/bin/bash No such file or directory 排查:进入单用户模式 linux16 行ro替换 rw init=/sysroot/bin/s ...
- 从go程序中发消息给winform(C#)
背景: 1.服务端语言为GO,客户端语言为:C#(WinForm): 2.在客户端操执行长耗时任务时,服务器应该将后台日志或定时将心跳信息及时传递给客户端,这样方便用户查看服务器执行情况(重要). 一 ...
- 四、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-会话好友列表的实现
会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...
- IDEA配置连接(自建Maven仓库)私服并打包上传
maven的setting.xml文件配置 在servers标签里配置 <server> <id>privete_maven</id> <!--账号密码需要与 ...
- IDEA版本2020.1全局MAVEN配置
我们用IDEA打开项目有时候要每次配置maven地址,这样就很麻烦 我们可以直接设置全局的 这样所有新打开的项目都能使用
- RPA账户和密码管理方案
如何将登录业务系统的账户和密码"更好的,更合适"地交给RPA? 相信很多小伙伴们在做RPA的时候, 都会或多或少的遇到类似的问题. 正常情况下IT管理人员都会给真实的业务人员分配业 ...
- 【LeetCode】101. Symmetric Tree 对称二叉树(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 [LeetCode] 题目地址 ...
- 【LeetCode】941. Valid Mountain Array 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】567. Permutation in String 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/permutati ...
- Docker 与 K8S学习笔记(三)—— 镜像的使用
前面的文章介绍过镜像的三种获取方式: 下载并使用别人创建好的镜像: 在现有镜像上创建新的镜像: 从无到有创建镜像. 本文主要介绍前两种. 一.下载镜像 在Docker Hub上有大量优质镜像可以使用, ...