dubbo服务暴露原理-远程暴露
1.与本地暴露相比,远程暴露也大同小异
我们已经到了第三个关键词Procotol我们来看看他的继承体系图
按照经典图的路线,我们下一个关键词应该就是Server
了,从方法名openServer(url)
也可以看出来确实是这样.在这个Procotol
和Transporter
插播一个关键词,那就是Exchanger
从单词意思我们知道,这个是交换
的意思,按照计算机术语,这个称之为交换层
更贴切.那么问题来了,他交换什么东西?那我们来看一下他的方法图(粗暴式点题,怎么看源码)
下面就要注意了,我们要来到下一个关键词Transporter
,这个从字面理解为传输层
,那这个究竟是什么传输层?我们来看一下继承体系图
从这里就可以看出,这个是网络传输层
,其中Grizzly
和Mina
和Netty
都是非常有名的NIO框架,想了解他们可以查一下相关资料
继续往下走,看到这里有个构造方法,那么就要敲黑板画一下重点了.看源码凡是遇到构造方法的,都要特别注意,因为我们知道调用构造方法前,会先调用父类的构造方法,因此,这个继承体系图是要看一下的
因此我们将断点打到他的父类上,可以看出,这做的主要是一些根据配置文件设置一些超时时间之类的
高潮还没完,我们注意到,在AbstractServer
类中有一个doOpen()
方法.这个doOpen()
方法方法是一个抽象方法,这种做法称之为钩子方法
.也叫模板方法
,熟悉设计模式的话,会对这种方式并不模式,其实在Servlet
的init()
方法也是这种做法,可以看看Servlet
的源码(粗暴式点题,看源码学到了什么)
那么我们就到了doOpen
方法,这里如果大家写过一些简单的netty例子看到这段代码就会很熟悉了
另外提一下这个9
并不是固定的,这个和我们的机器是有关的,不熟悉的参数我们可以用以下的方式查一下文档
Transporter
关键词之前是有new
一个HeaderExchangeServer
对象的.在这个构造方法中,通过startHeatbeatTimer
设置了netty的心跳,这些netty的细节我们在后面的netty专题再细说
正如官方文档所说Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程
,看到这个exporter
,也预告本篇走到了尾声
参考:https://www.jianshu.com/p/893f7e6e0c58