一本书精通Apache RocketMQ

简介: 一本书精通Apache RocketMQ

随着移动互联网的充分发展,各种新技术层出不穷,只有优秀的技术才能经得起行业的考验。而消息中间件是后台技术栈中绕不开的一个技术组件,其是应对海量用户、高并发、高可靠的架构挑战的超级利器。Apache RocketMQ正是这样一款足够优秀的消息中间件产品。Apache RocketMQ 脱胎于阿里巴巴的“双十一”,经过多年“双十一”洪峰流量的考验,其性能、稳定性已经得到证明,而后广泛应用于多个大型的互联网公司,如滴滴、微众银行等,已经成为国内最优秀、最受欢迎的消息中间件之一。


经过多年的发展,介绍RocketMQ的书籍、文章已不少。读者可以借助这些优秀的书籍、文章去学习RocketMQ的使用,去了解源码的实现。然而一些书籍或者博客文章大多基于源码解读的方式展开,这种方式对于深入学习确实很有益处,但是学习难度较大且较为枯燥,使初学者产生畏难情绪。


这本《Apache RocketMQ 进阶之路》的宗旨是让读者能轻松掌握Apache RocketMQ的原理、最佳实践,所以放弃了贴源码、贴示意代码的传统方式。而是大量采取图表说明的方式进行展开。希望通过这种方式能帮助读者利用地铁上、睡觉前等碎片时间轻松理解Apache RocketMQ的原理并掌握其优秀的实践。


RocketMQ长轮询技术内幕


长轮询(Long Polling)是一种比较特殊的轮询机制。讲解长轮询之前,先介绍下什么是轮询。


短轮询


简单来说,轮询也叫短轮询,短轮询就是 Pull 模式的客户端,每隔一段时间拉取一遍数据。运气好的话,可能就有数据,但是可能大部分情况运气都不好,那就做了一遍无用功,还增加了服务端的压力。为了消息的实时性足够高,轮询的频次就要足够密,但这变相又增加了服务端的压力。使用短轮询时,开发者需要权衡消息实时性和服务端压力两者的关系。如图1所示,客户端每5s请求一次最新数据,那么数据将最长在5s的时间内得到刷新,也就是说数据的展示最多会有5s的延迟。如果还需要缩短这个延迟,则需要更加频繁的访问(例如1s访问一次),但是这样也会放大服务端的压力。 图1.短轮询示意图


那么有没有可能在不增加服务端压力的前提下,也能保证实时性的轮询呢?答案就是长轮询。


长轮询


如果读者在网上去查询长轮询的概念,你很可能会得到下面一段解释。

“服务端没有相关数据,会 Hold 住请求,直到服务端有相关数据,或者等待一定时间超时才会返回。”


举一个例子(如图2所示),消费者在 10:00:00 的时候发起了 Pull 请求,但是这时候消息并没有到达,这时候服务端会 Hold 住这个请求,10 s后10:00:10 消息到了,才返回新的消息给消费者。也就是说对于客户端(消息接收者)来说,这个请求看起来处理了10s才返回,10s之后结果返回的时候就得到了最实时的内容了,这之后立刻又发起下一轮的请求。正因为这个方案也需要客户端持续性的发起查询请求,所以叫作长轮询。


图2.长轮询流程示意图


这种方案,服务端在没有数据的时候是不会给客户端作响应的,所以客户端不会持续发起没有新数据内容返回的请求,也就是说不会有无用功的产生。这一点设计很重要,因为这样保证了请求量是有限的,不会持续地增大服务端压力。同时当新消息内容产生的时候,消息又能及时的返回给接收方,感觉就像有推送一样,所以消息是很实时的,几乎能达到和Push机制一样的实时性。


这里面的第2步需要服务Hold住请求,读者可能会觉得有点玄幻,什么叫“Hold 住请求”?具体怎么实现这个 “Hold 住请求”呢?详细内容见《Apache RocketMQ 进阶之路》第四章。


  • 《Apache RocketMQ 进阶之路》的结构采取由浅入深的方式。全书分基础篇、原理篇、进阶篇。基础篇讲解Apache RocketMQ 的基础使用及一些最佳实践的总结。原理篇按模块点深入讲解Apache RocketMQ的核心设计,是Apache RocketMQ 设计中最精华的部分,通过此部分的学习,读者将深入掌握别人需要阅读源码才能掌握的优秀设计。进阶篇则是笔者在多年大型互联网项目的实践中遇到的一些高级话题、难题,能帮助不少开发人员成为优秀架构师。
  • 《Apache RocketMQ 进阶之路》告别枯燥的源码解读,以生动的案例、上百张手绘图逐层揭秘RocketMQ的原理,真正意义上做到了深入浅出;如果只推荐一本书去学习RocketMQ,本书将是最合适的一本。
  • 《Apache RocketMQ 进阶之路》采取类比讲解的方式去展开一些知识点。例如讲解顺序消息的章节同时也会介绍Kafka 的实现、在讲解事务消息的章节也会介绍分布式事务的通用解决方案,通过这种方式很容易引导读者思考和联想,使得知识的掌握更为轻松。类似课堂的学习一样,每一章的结束都会留一道或数道思考题,以便进一步加深对知识的掌握与理解。
  • 《Apache RocketMQ 进阶之路》分三大部分。第1部分是基础篇,包含第 1~4 章,主要讲解Apache RocketMQ入门及其基础使用。第2部分是原理篇,包含第 5 ~12 章,主要讲解如消费原理、负载均衡原理、顺序消息原理等核心的RocketMQ部分。第3部分是进阶篇,包含第 13~16 章,主要讲解如消息幂等、双活设计等进阶为架构师必须掌握的内容。


作者介绍



配套资源丰富



图书内文展示



相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 存储 canal
3分钟白话RocketMQ系列—— 如何保证消息不丢失
3分钟白话RocketMQ系列—— 如何保证消息不丢失
5256 1
|
SpringCloudAlibaba Dubbo Java
SpringCloud Alibaba集成Dubbo实现远程服务间调用
SpringCloud Alibaba集成Dubbo实现远程服务间调用
|
11月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
1055 94
|
5月前
|
搜索推荐 数据安全/隐私保护 Windows
Windows 11安装全流程 Windows版:PE启动盘制作+Win11安装
本教程详解如何用8GB以上U盘制作PE启动盘,并以此安装Windows 11系统。涵盖U盘格式化(NTFS)、PE工具写入、ISO部署、C盘格式化、系统初始化、解压软件安装及数字激活全流程,操作清晰,适配主流硬件。(239字)
5424 7
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
消息中间件 Java 中间件
RocketMQ实战—2.RocketMQ集群生产部署
本文主要介绍了大纲什么是消息中间件、消息中间件的技术选型、RocketMQ的架构原理和使用方式、消息中间件路由中心的架构原理、Broker的主从架构原理、高可用的消息中间件生产部署架构、部署一个小规模的RocketMQ集群进行压测、如何对RocketMQ集群进行可视化的监控和管理、进行OS内核参数和JVM参数的调整、如何对小规模RocketMQ集群进行压测、消息中间件集群生产部署规划梳理。
RocketMQ实战—2.RocketMQ集群生产部署
|
NoSQL Java 测试技术
【📕分布式锁通关指南 05】通过redisson实现分布式锁
本文介绍了如何使用Redisson框架在SpringBoot中实现分布式锁,简化了之前通过Redis手动实现分布式锁的复杂性和不完美之处。Redisson作为Redis的高性能客户端,封装了多种锁的实现,使得开发者只需关注业务逻辑。文中详细展示了引入依赖、配置Redisson客户端、实现扣减库存功能的代码示例,并通过JMeter压测验证了其正确性。后续篇章将深入解析Redisson锁实现的源码。
726 0
【📕分布式锁通关指南 05】通过redisson实现分布式锁