介绍
上一篇文章说到我们启动了一个NettyServer,写过Netty程序的小伙伴都知道我们是通过实现
ChannelHandler接口来处理业务逻辑的,然后将ChannelHandler增加到ChannelPipeline上,一个请求被ChannelPipeline上的ChannelHandler依次处理,典型的责任链模式
但是在上一节NettyServer启动的时候,我们看到了ChannelPipeline上只加入了一个ChannelHandler即NettyServerHandler(实现了io.netty.channel.ChannelHandler接口),其实这个NettyServerHandler什么都没做,只是将请求转到Dubbo的ChannelHandler(实现了org.apache.dubbo.remoting.ChannelHandler)上。
注意,Netty和Dubbo中都定义了ChannelHandler接口。Netty中的ChannelHandler执行用的是责任链模式,而Dubbo中的ChannelHandler执行用的是装饰者模式。而Dubbo只所以要重新定义一个ChannelHandler接口,主要是为了不和具体的通信层框架耦合,毕竟网路通信框架不只有Netty
所以真正的请求执行会经过如下几个ChannelHandler,其中只有NettyServerHandler实现的是Netty框架中的Ch