mksz821-MQ大牛成长课--从0到1手写分布式消息队列中间件
一、MQ是什么 MQ全称为Message Queue,即消息队列 ,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生 产、存储、消费全过程的软件系统,遵循FIFO原则。二、为什么用MQ 上下班高峰期使用天府通刷码的人非常多,以为做并发量很高,一个出站请求到后台需要做费用结算,或者积分赠送等业务。由于并发很高,并且费用结算和积分等业务本来就耗时,况且支付服务也不一定能承担那么大的请求量。 当服务器线程耗尽,后续请求会等待变慢,再加上高并发请求就会导致后续请求越来越慢,请求长时间等待,导致大量请求超时。并发太高,可能会导致服务器的内存上升,CPU使用率急速上升,甚至导致服务器宕掉。
加入MQ后的效果 高并发请求在MQ中排队,达到了消除峰值的目的,不会有大量的请求同时怼到支付系统 服务异步调用,“天府通出站API” 把结算消息放入MQ就可以返回“出站成功,费用稍后结算”给用户,响应时间很快 服务彻底解耦,即使支付服务挂掉,也不影响“天府通出站API”正常工作,当支付系统再启动仍然可以继续消费MQ中的消息。
├──第1章 课程导学介绍/
│ ├── [ 13M]1-1手写消息中间件--课程导学
│ └── [ 12M]1-2课程详细内容安排
├──第2章 深入常用消息队列原理/
│ ├── [ 51M]2-1RabbitMq架构原理深入剖析
│ ├── [ 53M]2-2RocketMq架构原理深入剖析
│ ├── [ 46M]2-3Kafka架构原理深入剖析
│ └── [ 18M]2-4三种消息队列对比剖析
├──第3章 消息中间件架构设计篇/
│ ├── 3-1本章介绍
│ ├── [ 22M]3-2CommitLog介绍-MQ的消息都存在哪儿?
│ ├── [ 29M]3-3ConsumerQueue介绍-面对多消费者,消息的分配要如何设计
│ ├── [ 18M]3-4消息集群架构思考(一)为什么消息队列还需用到注册中心?
│ ├── [ 37M]3-5消息集群架构思考(二)多节点存储的架构要如何实现?
│ ├── [ 39M]3-6复杂消息功能思考(一)消息重试机制如何实现?
│ ├── [ 31M]3-7复杂消息功能思考(二)延迟消息要怎么做?
│ ├── [ 35M]3-8复杂消息功能思考(三)事务消息是怎么一回事?
│ ├── [ 16M]3-9复杂消息功能思考(四)内存映射自扩容设计思路
│ └── 3-10本章回顾
├──第4章 【手写篇 - 第一步】 数据存储核心 - commitLog设计与实战/
│ ├── 4-1本章介绍
│ ├── 4-2代码仓库介绍
│ ├── 4-3消息原始数据存储结构讲解
│ ├── [ 36M]4-4操作系统原理之-传统文件IO读写介绍
│ ├── [ 42M]4-5基于mmap的读写工具封装(一)基础功能的实现
│ ├── [ 28M]4-6基于mmap的读写工具封装(二)mmap的内存释放讲解
│ ├── [ 33M]4-7基于mmap的读写工具封装(三)mmap工具的效果验证
│ ├── [ 38M]4-8如何实现mq消息的顺序写入
│ ├── [ 41M]4-9mq消息存储配置的管理
│ ├── [ 40M]4-10mq基础配置的封装
│ ├── [ 40M]4-11Broker的启动类设计
│ ├── [ 27M]4-12commitLog写入逻辑细节分析
│ ├── [ 67M]4-13如何获取最新写入的commitLog文件
│ ├── [ 15M]4-14消息内容结构体设计
│ ├── [ 35M]4-15消息结构体封装的实践
│ ├── [ 40M]4-16commitlog文件剩余空间检测机制
│ ├── [ 53M]4-17消息投递offset更新机制的实现
│ ├── [ 22M]4-18消息写入的配置属性同步更新
│ ├── [ 46M]4-19多线程场景下mmap的读写如何优化
│ └── [ 17M]4-20commitlog追加写入数据测试
├──第5章 【手写篇 - 第二步】消息分派的核心 - ConsumeQueue分析与实战/
│ ├── 5-1本章介绍
│ ├── [ 26M]5-2针对ConsumerQueue的dispatcher操作
│ ├── [ 33M]5-3consumequeue的文件存储结构设计
│ ├── [ 20M]5-4【实战】ConsumeQueue存储结构实现(一)ConsumerQueue的offset数据结构设计
│ ├── [ 25M]5-5【实战】ConsumeQueue存储结构实现(二)offset映射模型的实现
│ ├── [ 18M]5-6【实战】ConsumeQueue存储结构实现(三)ConsumeQueue的offset定时刷盘机制
│ ├── [ 62M]5-7【实战】ConsumeQueue存储预热链路逻辑搭建
│ ├── [ 44M]5-8【实战】ConsumeQueue文件的预热实现
│ ├── [ 24M]5-9consumequeue文件的映射写入和offset更新
│ ├── [ 11M]5-10consumeQueue处理器的基础接口定义
│ ├── [ 24M]5-11consumeQueue的offset定位获取
│ ├── [ 41M]5-12consumequeue的数据读取实现
│ ├── [ 47M]5-13consumequeue的offset更新实现
│ └── [ 20M]5-14多消费者消费效果验证
├──第6章 【手写篇 - 第三步】注册中心 - nameserver设计与实战/
│ ├── [ 19M]6-1本章介绍
│ ├── [ 46M]6-2注册中心的设计与实现-基础骨架的搭建
│ ├── [ 44M]6-3注册中心的设计与实现(一)事件总线的发布能力实现
│ ├── [ 35M]6-4注册中心的设计与实现(二)基于spi机制实现处理器实现
│ ├── [ 64M]6-5注册中心的设计与实现(三)事件监听的逻辑完善
│ ├── [ 39M]6-6注册中心的设计与实现(四)非法节点的剔除逻辑完善
│ ├── [ 33M]6-7注册中心的设计与实现(五)broker与nameserver的网络通信建立
│ ├── [ 68M]6-8注册中心的设计与实现(六)broker远程通信sdk的封装实现
│ ├── [ 42M]6-9broker和nameserver的访问测试
│ ├── [ 17M]6-10nameserver集群架构的设计思路剖析
│ ├── [ 48M]6-11-1nameserver主从复制-主节点同步进程开启
│ ├── [ 51M]6-12-2nameserver主从复制-主节点同步进程开启
│ ├── [ 52M]6-13nameserver主从复制-主节点同步线程
│ ├── [ 56M]6-14nameserver主从复制-从节点连接主节点
│ ├── [ 25M]6-15nameserver主从复制-从节点接收主节点数据同步过程
│ ├── [ 37M]6-16nameserver主从复制-同步效果验证
│ ├── [ 62M]6-17nameserver主从复制-同步复制,异步复制,半同步复制的三种模式实现(一)
│ ├── [ 32M]6-18nameserver主从复制-同步复制,异步复制,半同步复制的三种模式实现(二)
│ ├── 6-19链式复制架构的介绍
│ ├── [ 44M]6-20链式复制的初始化实现mov
│ ├── [ 53M]6-21链式复制的同步实现-全链路同步的实现
│ ├── [ 49M]6-22链式复制的实现-全链路ack反馈的实现
│ ├── [ 12M]6-23链式复制的实现-数据同步效果验证
│ └── 6-24本章回顾
├──第7章 【手写篇 - 第四步】客户端SDK设计与实战/
│ ├── 7-1本章介绍
│ ├── [ 11M]7-2如何设计一款消息队列的客户端SDK
│ ├── [ 87M]7-3Netty异步转同步的功能封装
│ ├── [ 48M]7-4Producer角色如何与NameServer建立网络连接
│ ├── [ 76M]7-5拉取broker地址功能实现
│ ├── [ 44M]7-6客户端拉取出broker地址功能实现
│ ├── @优库it资源网ukoou.com
│ ├── [ 50M]7-7Producer端消息发送基础接口定义
│ ├── [ 56M]7-8Producer发送数据到Broker端持久化实现
│ ├── [ 28M]7-9Consumer基础接口的开发
│ ├── [ 12M]7-10消息重平衡过程的梳理
│ ├── [ 63M]7-11重平衡问题讲解
│ ├── [ 19M]7-12Kakfa,RocketMQ中的重平衡策略了解
│ ├── [ 19M]7-13消息消费需要考虑哪些问题
│ ├── [ 33M]7-14消费者消息拉取监听器实现
│ ├── [ 61M]7-15消息拉去请求链路完善
│ ├── [ 17M]7-16消费端拉消息场景测试
│ ├── [ 70M]7-17消费端拉数据后回应ack
│ ├── [ 28M]7-18全链路mq推送与消费验证
│ └── 7-19本章回顾
├──第8章 【手写篇 -第五步】broker高可用架构拓展实战/
│ ├── 8-1本章介绍
│ ├── [ 15M]8-2Broker的主从复制思路整理
│ ├── [ 70M]8-3topic的动态创建实现
│ ├── [ 21M]8-4动态创建topic效果验证
│ ├── [ 65M]8-5Broker集群模式下的实例注册逻辑实现
│ ├── [ 28M]8-6面对Broker集群,客户端拉取ip的实现
│ ├── 8-7Broker集群的复制逻辑剖析
│ ├── [ 81M]8-8Broker的主从链接通道初始化建立实现
│ ├── [ 24M]8-9Broker主从节点多目录文件拆解
│ ├── [ 31M]8-10Broker主从异步复制的实现
│ ├── [ 36M]8-11Broker主从同步复制实现与验证
│ ├── [ 48M]8-12Broker主从切换过程中会遇到的问题
│ ├── [ 38M]8-13Broker主节点宕机监听处理
│ ├── [ 27M]8-14Broker主从切换效果实现
│ └── 8-15本章总结
├── 第9章 【手写篇 - 第六步】复杂消息处理(一) - 消息重试功能的设计与实现/
│ ├── 9-1本章介绍
│ ├── [ 42M]9-2消息重试设计思路实现
│ ├── [ 44M]9-3消息重试Netty请求链路打通
│ ├── [ 16M]9-4Consumer消息重试链路在时间轮中的运作细节梳理
│ ├── [ 20M]9-5重试消息的存储效果验证
│ ├── [ 51M]9-6时间轮组件的实现(一)
│ ├── @优库it资源网ukoou.com
│ ├── [ 37M]9-7时间轮组件的实现(二)
│ ├── 9-8时间轮组件的效果验证
│ ├── [ 24M]9-9多极时间轮的切换验证
│ ├── [ 28M]9-10时间轮事件事件回调通知
│ ├── [ 33M]9-11重试监听器回调
│ ├── [ 26M]9-12重试主题的自动创建
│ ├── [ 30M]9-13消息重试队列推送和消费的实现
│ └── 9-14本章回顾
├── 第10章 【手写篇 - 第七步】复杂消息处理(二) - 延迟消息功能的设计与实现/
│ ├── 10-1本章介绍
│ ├── [ 15M]10-2延迟消息设计以及使用场景介绍
│ ├── [ 34M]10-3延迟消息的效果实现
│ ├── [ 33M]10-4延迟消息的持久化实现
│ ├── [ 50M]10-5延迟消息的数据恢复如何实现
│ └── 10-6本章介绍
├── 第11章 【手写篇 - 第八步】复杂消息处理(三) -事务消息功能的设计与实现/
│ ├── 11-1本章介绍
│ ├── 11-2事务消息设计思路回顾
│ ├── [ 44M]11-3事务消息的half消息提交
│ ├── [ 59M]11-4本地事务回调接口的实现
│ ├── [ 59M]11-5事务消息回调处理
│ ├── [ 18M]11-6事务消息的效果验证
│ └── 11-7本章回顾
├── 第12章 【手写篇 - 第九步】可视化管理控制台设计与实战/
│ ├── 12-1本章介绍
│ ├── 12-2基础控制台的接口开发
│ ├── [ 25M]12-3Broker数据的上报实现
│ ├── [ 34M]12-4控制台的基础开发思路梳理
│ ├── 12-5控制台效果演示
│ └── 12-6本章介绍
├── 第13章 【手写篇 - 第十步】基于消息队列综合实战/
│ ├── 13-1本章介绍
│ ├── [ 22M]13-2MQ多泳道环境的实现
│ ├── [ 18M]13-3Kafka和实时计算
│ └── 13-4本章回顾
└── 第14章 课程回顾与常见面试题剖析/
├── 14-1本章介绍
└── [ 10M]14-2课程回顾
└── 资料代码/