dubbo信息交换

信息交换层(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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,166评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • You don’t have to be Gandhi or Mother Theresa to think wi...
    章磊磊阅读 4,336评论 21 123
  • 我需要进行教育与课程的主题阅读,今天开始读杜威的《民主主义与教育》,刚读完滕大春写的导读,介绍了杜威生平及教育主张...
    婉琳阅读 298评论 0 0