dubbo线程模型

这里写dubbo线程模型,主要是讲服务消费者和服务提供者这两大核心的线程模型。

一 dubbo服务提供者线程模型。

这里我们想得到dubbo线程模型,先启动dubbo提供者,然后jstack pid >> stack.log获取线程信息。也可以根据debug来观察信息,如下图所示。

11111.PNG

主要有以下线程:

  • 5 New I/O worker
  • 1 New I/O server boss
  • 1 dubbo-remoting-server-heartbeat-thread-1
  • 1 DubboRegistryFailedRetryTimer-thread-1
  • 1 ZkClient-EventThread-23-127.0.0.1:2181
  • 1 main-SendThread
  • 1 main-EventThread
  • 6 DubboSaveRegistryCache-thread-1
  • 1 DubboServerHandler-ip-thread-1
  • 1 DubboResponseTimeoutScanTimer

根据jstack打印的堆栈以及相关调用链路上debug会得出一些信息。

  • New I/O worker和New I/O server boss 对应netty的worker和boss线程。
  • heartbeat,心跳检测,dubbo服务端启动会,会对和客户端的长连接做周期性检查。
  • DubboRegistryFailedRetryTimer

dubbo服务提供者流程。

  • (New I/O worker线程)当有请求进来的时候,因为是长连接,这里的请求进来指的是Channel接受到消息,首先是进入NettyHandler的messageReceived方法。
  • 然后经过HeartbeatHandler判断是不是心跳请求或者响应,发现不是,则继续往下执行received。
  • 再往下走,把这里的Channel,ChannelHandler,message扔给ChannelEventRunnable类,放在DubboServerHandler-xxx-thread-8线程执行。
  • 该线程执行代码是在ChannelEventRunnable:run中。发现是RECEIVED,则调用DecodeHandler的received。然后执行到HeaderExchangeHandler的received。在received中,会有这个代码Response response = handleRequest(exchangeChannel, request);。然后返回结果。

二 dubbo服务消费者线程模型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容