Dubbo线程模型Dispatcher策略
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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