Dubbo——服务端接收请求的处理流程
服务端接收请求的处理流程
在创建NettyServer对象时,初始化了NettyHandler对象,该对象中的ChannlHandler赋值为NettyServer对象。在接受到消息之后,调用NettyHandler.messageReceived方法,后续的调用链为:NettyServer—>MultiMessageHandler-->HeartbeatHandler—> AllChannelHandleràDecodeHandleràHeaderExchangerHandleràDubboProtocol$requestHandler。在上述调用链中创建了Response对象并封装了RpcInvocation对象。具体的流程在《7.1请求/响应的处理流程》中讲解。
最后在DubboProtocol$requestHandler处理RpcInvocation对象,根据URL地址生成serviceKey,再查找到服务端的Invoker对象,然后经过过滤器链和监听器链(在暴露服务时创建的,具体见《监听器链》《过滤器链》的讲解),最后在JavassistProxyFactory.getInvoker方法创建的AbstractProxyInvoker对象中通过反射的方式完成具体业务层的调用。见《3.3.1本地暴露服务》。
具体流程如下: