dubbo信息交换

2017-12-26  本文已影响50人  忘净空

信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

源码走读

DubboInvoker类的doInvoke方法开始

image.png

顺着同步调用的方法往下走!


HeaderExchangeChannel类的request

封装request请求参数,详细看DefaultFuture future = new DefaultFuture(channel, req, timeout)方法。

如何获取Result呢?请看DefaultFuture的get方法。



其实get方法中处理很简单,就是没有执行完成,线程切换到等到状态,那么线程何时唤醒呢?

HeaderExchangeHandler类received方法

顺着方法一直往下追,将在DefaultFuture类中看到下面的代码。



唤醒线程

问题

  1. 封装request请求的时候为何要将requestId作为key,DefaultFuture作为value塞进Map中。

dubbo协议单一长连接,但是客户端多线程并发请求,为了保证request和response对应需要request标识一个id,同时response也携带这个id。

上一篇下一篇

猜你喜欢

热点阅读