1. 与Netty整合后的线程模型分析
本文是对Dubbo的学习笔记,由于Dubbo功能比较庞大,这里重点介绍Dubbo与Netty整合部分。目的是搞懂一个Rpc请求从Consumer到Provider调用链中所涉及到的线程模型,因为我认为微服务中RPC最关键的无非三点:
1. 数据协议
2. 传输通道
3. 线程模型
弄懂线程模型是调优的关键一环,Dubbo中Dispatcher就是设置线程模型的
- ·all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。
- ·direct 所有消息都不派发到线程池,全部在IO线程上直接执行。
- ·message 只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在IO线程上执行。
- ·execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在IO线程上执行。
- ·connection 在IO线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。
看懂Dubbo与Netty整合也是需要前提条件的,比如
- 对Java线程池有一定了解
- 了解Nio的编写
- 对Netty NioEventLoop,Pipeline有一定了解,Netty主要还是对Java原生Nio进行封装,提供了Reactor线程模型,事件Pipeline,存池等功能。