一本书精通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系列—— 如何保证消息不丢失
4937 1
|
消息中间件 NoSQL JavaScript
阿里官方 Redis 开发规范
阿里官方 Redis 开发规范
|
5月前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
4220 9
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
消息中间件 存储 RocketMQ
Rocketmq如何保证消息不丢失
文章分析了RocketMQ如何通过生产者端的同步发送与重试机制、Broker端的持久化存储与消息重试投递策略、以及消费者端的手动提交ack与幂等性处理,来确保消息在整个传输和消费过程中的不丢失。
|
消息中间件 存储 数据库
深入学习RocketMQ的底层存储设计原理
文章深入探讨了RocketMQ的底层存储设计原理,分析了其如何通过将数据和索引映射到内存、异步刷新磁盘以及消息内容的混合存储来实现高性能的读写操作,从而保证了RocketMQ作为一款低延迟消息队列的读写性能。
|
8月前
|
消息中间件 人工智能 自然语言处理
基于 RocketMQ 事件驱动架构的 AI 应用实践
基于 RocketMQ 事件驱动架构的 AI 应用实践
291 2
|
8月前
|
消息中间件 存储 算法
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
一文详解 RocketMQ 如何利用 Raft 进行高可用保障
312 1
|
消息中间件 存储 Kafka
RocketMQ 工作原理图解,看这篇就够了!
本文详细解析了 RocketMQ 的核心架构、消息领域模型、关键特性和应用场景,帮助深入理解消息中间件的工作原理。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
RocketMQ 工作原理图解,看这篇就够了!
|
8月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
419 0
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!