Dubbo源码分析(三)Exchanger
来源:互联网 发布:数据库是什么文件 编辑:程序博客网 时间:2024/04/18 04:58
在一个框架中我们通常把负责数据交换和网络通信的组件叫做Exchanger。Dubbo中每个Invoker都维护了一个ExchangeClient的引用,并通过它和远程的Server进行通信。整个与ExchangeClient相关的类图如下
其中包含了remoting相关的接口定义。个人觉得这个接口设计有些过于发杂,但为了可以展示全貌还是把全部内容都画了进去。
ExchangeClient只有一个常用的实现类,HeaderExchangeClient
先通过url获取Exchanger,默认返回一个HeaderExchanger,之后通过它的connect()创建HeaderExchangeClient。
在Invoker需要发送数据时,单程发送使用的是ExchangeClient的send方法,需要返回结果的使用request方法
在实现中这个调用被传递到HeaderExchangeClient维护的HeaderExchangeChannel对象,而channel后续的具体操作又依赖构造函数中传入的Client,这个参数实际是一个Channel接口。
最终send方法传递到channel的send,而request方法则是通过构建ResponseFuture和调用send组合实现的。接下来的重点就是这个Channel参数如何来构建
它来自Transporters的connect方法,具体的Transporter来源于ExtensionLoader,默认为NettyTransporter,由它构建的是NettyClient。NettyClient再次维护了一个Channel引用,来自NettyChannel的getOrAddChannel()方法,创建的是NettyChannel。最终由基类AbstractClient实现的send方法调用了NettyChannel
执行Netty的channel.write()将数据真正发送出去,也可以由此看出boolean sent;参数的含义:是否去等待发送完成、是否执行超时的判断。
本文主要以Client的角度对通信流程进行了介绍,Server端也可以遵循这样的路径去梳理,这里就不再赘述了。
- Dubbo源码分析(三)Exchanger
- Dubbo源码分析(三):Dubbo之服务端(Service)
- Dubbo源码分析(三):Dubbo之服务端(Service)
- Dubbo源码分析(三):Dubbo之服务端(Service)
- 《Java源码分析》:Exchanger
- 《Java源码分析》:Exchanger
- 源码分析之JUC-Exchanger
- Java 并发 --- Exchanger源码分析
- dubbo源码分析(一)
- dubbo源码分析(一)
- JUC源码分析30-线程池-Exchanger
- Java多线程 -- JUC包源码分析16 -- Exchanger源码分析
- Dubbo源码分析之三:服务的暴露
- Dubbo源码分析(四):Dubbo之Registry
- Dubbo源码分析(四):Dubbo之Registry
- Dubbo系列(七)Dubbo源码分析之结构描述
- Dubbo源码分析(一):概览
- Dubbo源码分析(一):概览
- 一次性检测出一个文件夹下的所有人脸
- 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)
- swift map reduce 获取下标(index)的方法
- Web版Telnet工具设计与实现
- 大数据的仓库Hive原理(三)
- Dubbo源码分析(三)Exchanger
- 走遍世界 —— 日本
- Android5.0新特性CollapsingToolbarLayout图片拉缩
- PHP框架开发教程(四) 单一入口
- 设置listview高度包裹内容
- JAVA的反射机制浅谈
- 了解流程类型,第 4 部分:左右滑动类
- 收集的小工具1【win7文件删除】
- Dubbo源码分析(四)Handler & Filter