dubbo系列十一、dubbo transport层记录 (3)

我的理解dubbo Channel也是对网络通道的的抽象,持有netty Channel,两者功能在抽象上是一样的,但是dubbo为了兼容mina、Grizzly,因此dubbo抽象的Channel是针对这几种通信框架的通道的抽象,做成一个统一模式,这些具体框架的通信变化并不会影响dubbo通信设计。

dubbo ChannelHandler是针对dubbo Channel的处理器,功能等同netty ChannelHandler。在dubbo中NettyClientHandler、NettyServerHandler分别是客户端和服务端连接netty pipeline和dubbo ChannelHandler chain的桥梁。

dubbo ChannelHandler

这里重要的是InternalEncoder/InternalDecoder、NettyServerHandler/NettyClientHandler

InternalEncoder/InternalDecoder:用于dubbo报文编解码

NettyServerHandler/NettyClientHandler:连接netty和dubbo ChannelHandler的桥梁(分别作用在服务端和客户端),这里dubbo为了灵活扩展(比如支持mina等),增加了和netty同名的 ChannelHandler、Channel,因此看代码的时候显得有些混乱,容易搞蒙圈。

dubbo ChannelHandler接口定义处理5个事件,分别是连接、断开、接收、发送、异常捕捉,是针对Channel的抽象。为什么要这么抽象呢?因为针对dubbo报文解码后有许多灵活变化,比如心跳处理、派发(dispatcher)处理、处理Request/Response、线程池调用业务方法、处理NettyServer/NettyClient事件,这样做是的目标是把netty ChannelHandler解耦,不需要实现大量的netty ChannelHandler来完成工作。只需要一个netty ChannelHandler(比如NettyServerHandler)就可以和dubbo ChannelHandler chain关联起来,方便了dubbo的扩展。从我们上图中分析,涉及到的一些dubbo ChannelHandler 作用如下:

dubbo ChannelHandler 作用
NettyServer   封装netty服务端事件,处理连接、断开、接收、发送、异常等事件  
NettyClient   封装netty客户端事件,处理连接、断开、接收、发送、异常等事件  
MultiMessageHandler   支持流中多消息报文批处理  
HeartbeatHandler   支持心跳处理  
AllChannelHandler   支持dubbo线程池调用业务方法  
DecodeHandler   支持在dubbo线程池中解码  
HeaderExchangeHandler   封装处理Request/Response的调用能力  
ExchangeHandlerAdapter   用于查找服务方法并调用  

既然有了dubbo ChannelHandler,即Channel处理器,那么自然也要有要处理的对象dubbo Channel

dubbo Channel

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjjyz.html