1.1 什么是消息队列
消息队列(Message Queue),从广义上讲是一种消息队列服务中 间件,提供一套完整的信息生产、传递、消费的软件系统,如图1-1所 示。
![](https://img-blog.csdnimg.cn/92703ff365714648b744fd3fcade57a3.png)
消息队列所涵盖的功能远不止于队列(Queue),其本质是两个进 程传递信息的一种方法。两个进程可以分布在同一台机器上,亦可以分 布在不同的机器上。
1.2 为什么需要消息队列
![](https://img-blog.csdnimg.cn/8b50dbe8fc314e09a1d43f705b003c10.png)
优点是显而易见的,短时间内吞吐量增加了好几倍,甚至数十倍。 缺点也明显,流量低峰期服务器相对较闲。 如何平衡平时的空闲与节假日的超高峰呢?我们想到了消息队列 (比如 Apache RocketMQ,Apache Kafka),也是目前业界比较常用的 手段。利用消息队列扭转处理订票请求,告知用户 30min 内会告诉他/ 她订票结果。优缺点明显:性能提升了,但是我们作为业务开发人员, 还要维护一个消息队列服务,人手完全不够。消息中间件呼之欲出。
1.2.2 程序间解耦
不同的业务端在联合开发功能时,常常由于排期不同、人员调配不 方便等原因导致项目延期。其实,其根本原因是业务耦合过度。 如图1-4所示,上下游系统之间的通信是彼此依赖的,所以不得不 协调上下游所有的资源同步进行,跨团队处理问题显然比在团队内部处 理问题难度大。
![](https://img-blog.csdnimg.cn/b1b57cf4aec54e96bbff1c0cbd48c36f.png)
![](https://img-blog.csdnimg.cn/7a186280103f4d88b7702f416f1ce4f2.png)
1.2.3 异步处理
处理订票请求是一个漫长的过程,需要检查预订的车次是否有预订 数量的票、下单扣库存、更新缓存等一系列操作。这些耗时的操作,我 们可以通过使用消息队列的方式,把提交请求成功的消息告诉用户。然 后异步处理这些耗时的操作,保证30min内能把处理的结果通过短信推 送给用户,否则系统处理多久,用户就会等多久。
![](https://img-blog.csdnimg.cn/90ce3b4870764176a15261cfdccf0fd1.png)
1.3 常见消息队列