Dubbo:基本原理机制。
分布式服务框架:
- 高性能和透明化的RPC远程服务调用方案
- SOA服务治理方案
- Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接
Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
分析源代码,基本原理如下:
- client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的
- 将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object
- 向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)
- 将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去
- 当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。
- 服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到callback对象里。
- 监听线程接着使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果了),至此,整个过程结束。
当前线程怎么让它“暂停”,等结果回来后,再向后执行?
答:先生成一个对象obj,在一个全局map里put(ID,obj)存放起来,再用synchronized获取obj锁,再调用obj.wait()让当前线程处于等待状态,然后另一消息监听线程等到服 务端结果来了后,再map.get(ID)找到obj,再用synchronized获取obj锁,再调用obj.notifyAll()唤醒前面处于等待状态的线程。
正如前面所说,Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?
答:使用一个ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。
下面我们用一个精简的图来说明最重要的两种Invoker:服务提供Invoker和服务消费Invoker:
转载:https://blog.csdn.net/paul_wei2008/article/details/19355681
Dubbo:基本原理机制。相关推荐
- Dubbo基本原理机制
分布式服务框架: 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省协议采用单一长连接和NIO异步 ...
- Dubbo基本原理与超时机制
一. dubbo基本原理 –高性能和透明化的RPC远程服务调用方案 –SOA服务治理方案 -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省协议采用单一长连 ...
- Dubbo SPI机制学习总结(持续更新...)
参考文章:Dubbo的SPI机制分析 首先来看看 Java SPI 的机制 Java SPI 起初是提供给厂商做插件开发用的,例如数据库驱动java.sql.Driver,市面上各种各样的数据库,不同 ...
- Dubbo SPI机制(上):一个普通的扩展类是如何加载的
这一篇我们先不讲Dubbo中的具体业务逻辑,我们来打基础,聊一聊Dubbo中的SPI机制. Dubbo SPI是干啥的 了解一个技术,得先知道它是为了解决什么问题而产生的.那么Dubbo SPI是干什 ...
- Dubbo基本原理与机制
1.什么是Dubbo Dubbo 是一款高性能.轻量级的开源 RPC 框架,提供服务自动注册.自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成. 2.Dubbo依赖关系 1.服务消费者 ...
- Dubbo超时机制导致的雪崩连接
Bug影响:Dubbo服务提供者出现无法获取Dubbo服务处理线程异常,后端DB爆出拿不到数据库连接池,导致前端响应时间异常飙高,系统处理能力下降,核心基础服务无法提供正常服务. Bug发现过程: ...
- Dubbo源码分析系列-深入Dubbo SPI机制
导语 在之前的博客中介绍过关于Java中SPI的机制,也简单的分析了关于Java中SPI怎么去使用.SPI的全称Service Provider Interface,是一种服务发现机制.SPI的本 ...
- Dubbo源码分析系列之-深入Dubbo扩展机制
导语: 在之前的博客中分析过Java的SPI机制,其实Dubbo的扩展点加载机制也是从JDK表中的SPI(Service Provider Interface)机制中开发而来,只不过在原生的基础上 ...
- 【dubbo源码解析】 --- dubbo spi 机制(@SPI、@Adaptive)详解
本文对应源码地址:https://github.com/nieandsun/dubbo-study 注意:dubbo 要求SPI扩展点的实现类必须要有一个无参构造,除了Wrapper实现类之外 文章目 ...
最新文章
- 干货!神经网络原来是这样和数学挂钩的
- CSS之定位布局(position,relative定位布局技巧)
- Tomcat的下载安装以及在eclipse中的配置
- c语言求n到m之间的素数和
- jq父级绑定事件的意义_js、jq事件绑定方式总结——以click事件为例
- PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取
- Commons Collections4 简单使用
- excel易用宝的修复
- 关于Android Pie(Android 9.0),你想知道的都在这了
- HTML期末作业-我的大学生活网页
- Git!从零开始用连接远程仓库!![全平台]
- 一文理解 JWT、JWS、JWE、JWA、JWK、JOSE
- android 更换桌面名称_更改安卓软件名称 android修改应用程序名称
- .NET Framework 类库——C#命名空间大全
- yolov5-6.0/6.1加入SE、CBAM、CA注意力机制(理论及代码)
- android 揭示动画_揭示自动驾驶汽车第4级和第5级的真实含义
- 微观经济学第六周作业(需求函数,收入效应与替代效应)
- p2p显示kad能连接 服务器未连接,P2P连不上kad网络怎么办
- a problem occurred with this webpage so it was reloaded
- 四月三十号OCP考试失败了- -!