dubbo信息交换

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

源码走读

DubboInvoker类的doInvoke方法开始

dubbo信息交换_第1张图片
image.png

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


dubbo信息交换_第2张图片
HeaderExchangeChannel类的request

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

dubbo信息交换_第3张图片

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


dubbo信息交换_第4张图片

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

dubbo信息交换_第5张图片
HeaderExchangeHandler类received方法

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


dubbo信息交换_第6张图片

dubbo信息交换_第7张图片
唤醒线程

问题

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

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

你可能感兴趣的:(dubbo信息交换)