精度RocketMQ通信机制源码

异步通信机制


源码精读

生产者发送消息

图1
异步监听消息发送结果

图2
创建一个线程池用其中的一个线程去执行发送消息的动作

图3
监听发送结果如果有回调函数则调用回调函数

这里的onSuccess回调就是图1中的回调函数

图4
1、一个请求对应一个请求编号每次请求的发送都要先获取一个信号量锁在服务器资源有限的情况下 防止调用太快导致服务不可用

2、一个请求编号对应一个响应结果将对应关系保存在内存中

3、进行netty通信

图5
NettyRemotingServer.NettyServerHandler读取到发送过来的请求并处理

图6
执行处理请求的逻辑

图7
将该请求封装成一个任务提交到业务线程池来处理处理完之后 封装响应对象(包含请求编号)发送给netty客户端

图8
NettyRemotingClient 接收到netty server发送过来的响应数据

图9
解析响应数据

图10
通过请求编号从内存中获取未来响应对象有回调函数则执行回调函数没有回调函数则将响应对象封装到未来对象中

图11
从线程池获取线程异步执行回调函数然后就来到了图3的回调图3回调到图1执行具体的onSuccess逻辑

上述流程的时序图


RocketMQ高性能通信实现机制源码精读相关推荐

  1. RocketMQ:消息ACK机制源码解析

    消息消费进度 概述 消费者消费消息过程中,为了避免消息的重复消费,应将消息消费进度保存起来,当其他消费者再对消息进行消费时,读取已消费的消息偏移量,对之后的消息进行消费即可. 消息模式分为两种: 集群 ...

  2. Apache Storm 实时流处理系统通信机制源码分析

    我们今天就来仔细研究一下Apache Storm 2.0.0-SNAPSHOT的通信机制.下面我将从大致思想以及源码分析,然后我们细致分析实时流处理系统中源码通信机制研究. 1. 简介 Worker间 ...

  3. React事件机制 - 源码概览(下)

    上篇文档 React事件机制 - 源码概览(上)说到了事件执行阶段的构造合成事件部分,本文接着继续往下分析 批处理合成事件 入口是 runEventsInBatch // runEventsInBat ...

  4. JVM-白话聊一聊JVM类加载和双亲委派机制源码解析

    文章目录 Java 执行代码的大致流程 类加载loadClass的步骤 类加载器和双亲委派机制 sun.misc.Launcher源码解析 Launcher实例化 Launcher 构造函数 双亲委派 ...

  5. Zookeeper--Watcher机制源码剖析二

    Watcher触发 我们从实际操作时候的表现来看Watcher的触发,比如Zookeeper中NodeDataChanged时间的触发是"Watcher监听的对应数据节点的数据内容发生变更& ...

  6. Zookeeper--Watcher机制源码剖析一

    Watcher-- 数据变更通知 我们知道Zookeeper提供来分布式数据的订阅/发布功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某个主题对象,当这个被监听对 ...

  7. ART虚拟机 | Cleaner机制源码分析

    目录 思考问题 1.Android为什么要将Finalize机制替换成Cleaner机制? 2.Cleaner机制回收Native堆内存的原理是什么? 3.Cleaner机制源码是如何实现的? 一.版 ...

  8. Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法

    Spark资源调度机制源码分析--基于spreadOutApps及非spreadOutApps两种资源调度算法 1.spreadOutApp尽量平均分配到每个executor上: 2.非spreadO ...

  9. android SDK-25事件分发机制--源码正确解析

    android SDK-25事件分发机制–源码正确解析 Android 事件分发分为View和ViewGroup的事件分发,ViewGroup比View过一个拦截判断,viewgroup可以拦截事件, ...

最新文章

  1. Java多线程-线程状态
  2. [转载] python3.x总复习
  3. 史上最全idea插件开发入门实战(傻瓜式教程)
  4. stm32F103 模拟I2C mpu6050收到数据全为0,或者地址为209,104,0x68,0xD0的一些解决办法总结
  5. FL Studio使用外部音源播放导入的MIDI文件
  6. mysql服务器cpu使用率过高100%
  7. 计算机网卡的总线接口分类有,网卡的详细分类是怎样的?以太网卡有将高层数据转换为比特流的功能吗?...
  8. sql按不同纬度拆分时间以及相关时间函数整理
  9. 实现西门子S71200/1500与三菱FX系列PLC通讯
  10. 电脑蓝屏错误代码0x0000007e的解决方法
  11. 最新版本EasyRecovery15个人免费版电脑数据恢复工具
  12. js小学生图区_js读取本地图片并显示
  13. yiui易柚7 是Android什么版本,康佳YIUI易柚操作系统
  14. 个人的偏好与擅长的领域
  15. Vue学习之前端路由
  16. linux下的文件夹图标右下脚有个锁怎么解决?
  17. 计算机科学期刊_成为数据科学家的五种科学期刊
  18. 黄金分割――设计师的设计利器
  19. 酷柚易汛进销存商业版,支持独立部署,数据更安全!
  20. 小牛电动车的充电器发热问题。

热门文章

  1. Yii2 源码分析 - 入口文件执行流程
  2. (三)构建dubbo分布式平台-maven模块规划
  3. C++中栈内存和堆内存
  4. puppet运行慢的一个小例子
  5. 即将改变软件开发的5个Java9新特性
  6. mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签...
  7. UVA 12904 Load Balancing 暴力
  8. 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
  9. MYSQL数据库与Emoji表情的故事
  10. php使用phantomjs