1、源码分析Dubbo服务调用流程
了解过Netty网络编程的童鞋们应该知道,netty的命令处理基于ChannelHandler(事件处理链),编码、网络传输、解码、处理等,下面是关于NettyServer的初始化过程
可以看出,传入Netty框架的事件处理Handler主要是3个:1、解码器;2、编码器;3、业务类NettyHandler。也就是说当服务端(Server)的读事件就绪后,进行网络读写后,会将二进制流传入解码器(Decoder),解码出一个一个的RPC请求,然后针对每一个RPC请求,交给NettyHandler相关事件处理方法去处理,在这里传入NettyHandler的ChannelHandler为NettyServer,以网络读命令为例,最终将调用NettyServer的父类AbstractPeer的received方法:
调用reply方法
代码@1:获取服务调用信息,例如调用服务类名(interface)、服务方法名、参数类型,参数值。
代码@2:获取调用者Invoker。
代码@3:调用Invoker,执行具体的方法调用。
上述过程非常简单,但其关键点在于Invoker,那这个Invoker到底是什么呢?
回顾一下我们在讲解:Dubbo服务提供者启动流程中已提到Invoker,在本篇中我们再次对该文进行补充说明。
2、再谈Dubbo服务提供