Dubbo线程模型Dispatcher策略

发布于 2022-09-12 23:29:27 字数 1185 浏览 36 评论 0

Dubbo的文档中写到:

all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。
direct 所有消息都不派发到线程池,全部在 IO 线程上直接执行。
message 只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在 IO 线程上执行。
execution 只有请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在 IO 线程上执行。
connection 在 IO 线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。

看了这部分对应的源代码
org.apache.dubbo.remoting.transport.dispatcher.all.AllChannelHandler
/**

 * on channel connected.
 *
 * @param channel channel.
 */
void connected(Channel channel) throws RemotingException;

/**
 * on channel disconnected.
 *
 * @param channel channel.
 */
void disconnected(Channel channel) throws RemotingException;

/**
 * on message sent.
 *
 * @param channel channel.
 * @param message message.
 */
void sent(Channel channel, Object message) throws RemotingException;

/**
 * on message received.
 *
 * @param channel channel.
 * @param message message.
 */
void received(Channel channel, Object message) throws RemotingException;

/**
 * on exception caught.
 *
 * @param channel   channel.
 * @param exception exception.
 */
void caught(Channel channel, Throwable exception) throws RemotingException;

上面的方法有对应的建立连接,断开连接等的对应处理,但是哪一个是心跳的消息是哪个呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

穿透光 2022-09-19 23:29:27

2.6.2版本下:

心跳也是消息,也对应 sent/received 两个方法,对应的处理在com.alibaba.dubbo.remoting.exchange.support.header.HeartbeatHandler,入口在com.alibaba.dubbo.remoting.transport.dispatcher.ChannelHandlers

dubbo 这个模型算是 chain/delegate 的方式,每一个handler 处理一个逻辑,heartbeat 也是一个 handler

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文