dubbo源码浅析-服务消费(客户端接收处理)
服务消费的最后一步,客户端接收服务端返回信息并进行相应的处理。
分析入口
- 同服务端接收一样,即NettyCodecAdapter内部类InternalDecoder#messageReceived,最终交给业务处理handler(NettyHandler)
流程分析
接收到服务端发送来的消息流程和上篇-服务端接收处理一致
- 在DecodeHandler#received()执行过程中有不同
message是Response类型。
- HeaderExchangeHandler#received()
- 调用DefaultFuture#received处理
之后的流程在服务消费-客户端发送以及分析过。大概逻辑就是从FUTURES中拿到DefaultFuture对象,赋值给response,唤醒业务线程进行业务处理并返回。
流程总结
客户端接收返回数据时和服务端接收基本一致,具体的处理流程是派发(根据具体的Dispatcher模式)到线程池去处理,利用future模式进行线程间的通信,将处理结果返回给调用方。
客户端接收相关线程状态
Dispatcher为all模式下,服务消费过程大致分为两次线程变更,第一次是从io线程变更至客户端线程池(派发),第二次是从线程池变更至调用服务的线程(线程池执行任务将执行结果送至DefaultFuture中,唤醒调用线程)。
下集预告:编解码