消息队列概述
不管是现在还是之前,你肯定有过排队买票的经历。在售票窗口两边竖起围挡,中间留有一人宽的空隙,每个人只能从这个围挡形成的通道到达售票窗口,起到强制排队的效果。试想如果没有这个围挡,在高峰期一群人蜂拥到窗口是什么效果?说不定把窗口挤爆了,最后你争我抢都买不着票。
互联中的很多技术都是对现实世界的抽象,为了应对类似集中访问服务器的场景(比如商品秒杀、抢红包等),使用了消息队列机制。将这些洪水般的请求放到一个队列中,服务器中的“消费者”不慌不忙地从队列中一个一个取出消息进行处理,起到消峰的作用。
消息队列的作用
- 消峰
不需要将每一次请求都进行全流程的处理(业务处理、数据库存取),可以先将它们放到队列中等待,这个队列一般放置在内存,存取速度是非常快的。比如秒杀,可能只要1%的真正秒杀到了商品,而其他没有秒杀成功的人就不需要进行后续的业务流程了,总体上减轻了服务器的压力(入口压力还是存在的)。 - 解耦
可以对队列中的消息进行异步地处理。生产端(往队列中放数据)和消费端(从队列中取数据)不需要相互依赖,互相之间不需要等待对方的响应。
RabbitMQ简介
说了这么多概念和理论,RabbitMQ就是这个真正“干活”的。RabbitMQ是一套开源(MPL)的消息队列服务软件。官网地址:https://www.rabbitmq.com/
RabbitMQ是轻量级的,很容易在本地和云中部署。它支持多种消息传递协议,可以部署在分布式环境中,以满足高规模、高可用性的需求。
提供了多种工作模式(五种主要工作模式后面会介绍到),可以应对多种应用场景。
RabbitMQ安装
以CenOS7为例,安装RabbitMQ3.8.5版本。
1.RabbitMQ3.8.5需要erlang(21.x版本)的支持。