RocketMQ分布式消息中间件:核心原理与最佳实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 什么是消息队列

消息队列(Message Queue),从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的软件系统,如图1-1所示。

图1-1

消息队列所涵盖的功能远不止于队列(Queue),其本质是两个进程传递信息的一种方法。两个进程可以分布在同一台机器上,亦可以分布在不同的机器上。

众所周知,进程通信可以通过RPC(Remote Procedure Call,远程过程调用)进行,那么我们为什么要用消息队列这种软件服务来传递消息呢?

下面我们以春节订火车票为例进行说明,流程如图1-2所示。

拿到年终奖了,准备买车票带着媳妇儿回家过年。你打开12306手机App开始做如下操作:

第一步:输入车票信息,发送订票请求。

起点站:北京。

终点站:成都。

出发时间:腊月29晚上8点。

票数:2张。

座席:硬卧。

第二步:单击“预订”按钮,12306 App界面开始转圈圈。与此同时全国3亿人民也在和你一起做相同的事情。

第三步:3s后,应用告诉你订票失败。

第四步:你修改车次,重新发送订票请求。应用重复第二步继续等待。又一个3s后,12306 App告诉你订票成功。

图1-2

12306 App在处理图1-2中的逻辑时,会遇到以下挑战:

(1)今天这个车次只售出4000张票,而实际有30万人发送了订票信息,如果逐一请求处理,那么90%以上的人都将要耗时3s来等待,怎么办?

(2)下游有 20 个系统需要在订票成功后进行通知,如果逐一调用这些系统的接口进行通知,而其中一个通知任务执行失败,那么已经通知成功的任务会怎样?

(3)12306 App架构会不断调整,当数据结构发生变化时,下游20个系统都随着一起变化吗?

以上只是随机列举了一些常见的问题,如何才能优雅地处理呢?

答案是:消息队列!