dubbo系列之网络通信-consumer的接收原理
简介
接着上一篇博客往下,在provider完成接收和发送之后,consumer才来接收,过程和provider的接收差不多,但还是有一点细微的区别,我们这篇博客就重点看看区别之处,相同的地方就直接跳过了,可参考上一篇博客。
源码介绍
NettyHandler类
messageReceived()
1 | public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { |
看一下此时的e.getMessage()的值
省略一段和provider相同的debug路程,直接进入重点
HeaderExchangeHandler类
handleResponse()
1 | public void received(Channel channel, Object message) throws RemotingException { |
区别来了,provider的是Request,而我们从上面的e.getMessage值得图就能看出来,consumer是进入Response循环,接着往下看。
DefaultFuture类
doReceived()
1 | //涉及到异步变同步的锁机制 |
一解锁,控制台立马打印
1 | [14:05:26] Hello world0, response form provider: 10.1.86.250:20880 |
这样consumer就拿到了数据了。
涉及到异步转同步得问题下一篇博客再介绍。