Dubbo版本: dubbo-2.6.2
源码地址: https://github.com/apache/dubbo
其中有的类在部分版本中被重构掉了,可能会出现找不到的情况
Dubbo中的线程模型
<br />这张图是Dubbo官网的线程模型图,它不仅是Dubbo官方的模型,也是广大RPC实现框架的一个模型。如果我们要自己去实现一个RPC,基本上也是按照这个思路去进行实现的。
这里涉及到2个线程模型,分别是Netty线程模型和Dubbo线程模型
实现细节
由于Dubbo默认的网络框架是基于Netty实现的,所以直接从Netty看起即可,如果对于Netty不了解或者是没有听过Netty,可以从这里查看细节 https://netty.io/.
Dubbo配置了3个hander,分别是
- InternalDecoder 解码
- InternalEncoder 编码
- NettyServerHandler (业务handler)
业务handler经过解码后收到信息讲起递交给MultiMessageHandler实现,具体实现中,会根据我们的dispatcher的配置交给 AllChannelHandler 使用,在内部将该事件传递给线程池。至此,Netty的IO线程的任务就算完成了,接下来就是Dubbo的业务线程池进行处理,后续就是耳熟能详的业务处理了<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />
如果对于Netty有一定了解,对此应该是非常之熟悉