聊聊dubbo的线程模型

dubbo的默认通信使用netty,netty的线程模型此文暂不讨论,我们看看dubbo在netty之后做了哪些针对线程模型的设计

dubbo与netty线程关系

默认所有请求均经过dubbo线程池执行业务逻辑
1

线程模型

NettyHandler接收到客户端请求后继续责任链处理,责任链如下
2

其中HeartbeatHandler封装的ChannelHandler句柄通过com.alibaba.dubbo.remoting.Dispatcher#dispatch返回。默认为:AllChannelHandler
Dispatcher就是我们所需要关注的责任调度器,Dispatcher通过SPI动态获取执行,官方提供的实现类有一下几种:

  1. AllDispatcher
  2. ConnectionOrderedDispatcher
  3. DirectDispatcher
  4. ExecutionDispatcher
  5. MessageOnlyDispatcher

上面的几种调度器正是对应dubbo的各种线程模型

  1. AllChannelHandler
  2. ConnectionOrderedChannelHandler
  3. ExecutionChannelHandler
  4. MessageOnlyChannelHandler

AllDispatcher

3

ConnectionOrderedDispatcher

4

DirectDispatcher

5

ExecutionDispatcher

6

MessageOnlyDispatcher

模型图同:ExecutionDispatcher

总结

  1. AllDispatcher:connected、disconnected、received、caught均使用dubbo线程池,sent不使用dubbo线程池,直接使用io线程池
  2. ConnectionOrderedDispatcher:connected、disconnected使用连接专用的"连接线程池",received、caught使用dubbo线程池,sent不使用dubbo线程池,直接使用io线程池
  3. DirectDispatcher:connected、disconnected、received、caught、sent均不使用dubbo线程池,直接使用io线程池
  4. ExecutionDispatcher:received使用dubbo线程池,connected、disconnected、sent、caught不使用dubbo线程池,直接使用io线程池。与MessageOnlyDispatcher的区别在于该模型的业务线程池满时,并且客户端使用twoway方式请求服务器,此时服务器会向客户端同步发送请求响应服务端线程池已满错误
  5. MessageOnlyDispatcher:received使用dubbo线程池,connected、disconnected、sent、caught不使用dubbo线程池,直接使用io线程池
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值