美文网首页
dubbo线程模型

dubbo线程模型

作者: xhrg | 来源:发表于2018-12-31 15:32 被阅读0次

    这里写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服务消费者线程模型。

    相关文章

      网友评论

          本文标题:dubbo线程模型

          本文链接:https://www.haomeiwen.com/subject/ikzilqtx.html