消息队列概述
不管是现在还是之前,你肯定有过排队买票的经历。在售票窗口两边竖起围挡,中间留有一人宽的空隙,每个人只能从这个围挡形成的通道到达售票窗口,起到强制排队的效果。试想如果没有这个围挡,在高峰期一群人蜂拥到窗口是什么效果?说不定把窗口挤爆了,最后你争我抢都买不着票。
互联中的很多技术都是对现实世界的抽象,为了应对类似集中访问服务器的场景(比如商品秒杀、抢红包等),使用了消息队列机制。将这些洪水般的请求放到一个队列中,服务器中的“消费者”不慌不忙地从队列中一个一个取出消息进行处理,起到消峰的作用。
消息队列的作用
- 消峰
不需要将每一次请求都进行全流程的处理(业务处理、数据库存取),可以先将它们放到队列中等待,这个队列一般放置在内存,存取速度是非常快的。比如秒杀,可能只要1%的真正秒杀到了商品,而其他没有秒杀成功的人就不需要进行后续的业务流程了,总体上减轻了服务器的压力(入口压力还是存在的)。 - 解耦
可以对队列中的消息进行异步地处理。生产端(往队列中放数据)和消费端(从队列中取数据)不需要相互依赖,互相之间不需要等待对方的响应。
RabbitMQ简介
说了这么多概念和理论,RabbitMQ就是这个真正“干活”的。RabbitMQ是一套开源(MPL)的消息队列服务软件。官网地址:https://www.rabbitmq.com/
RabbitMQ是轻量级的,很容易在本地和云中部署。它支持多种消息传递协议,可以部署在分布式环境中,以满足高规模、高可用性的需求。
提供了多种工作模式(五种主要工作模式后面会介绍到),可以应对多种应用场景。
RabbitMQ安装
以CenOS7为例,安装RabbitMQ3.8.5版本。
1.RabbitMQ3.8.5需要erlang(21.x版本)的支持。
在这里有对erlang安装的详细介绍:https://packagecloud.io/rabbitmq/erlang
安装之前,通过这个脚本进行环境配置,以帮你选择合适的版本:
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.deb.sh | sudo bash
执行脚本之后,就可以通过yum方式安装erlang了:
yum install erlang
2.socat安装
RabbitMQ还需要socat的依赖:
yum install socat
3.RabbitMQ安装准备工作
导入key:
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
rpm --import https://packagecloud.io/gpg.key
下载安装包:
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
执行安装:
rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
看到如下显示,代表安装成功:
支持通过浏览器对rabbitmq进行远程管理:
rabbitmq-plugins enable rabbitmq_management
启动RabbitMQ服务:
systemctl start rabbitmq-server
在浏览器访问:
http://主机IP:15672
但是此时还不能直接登录,否则会提示:User can only log in via localhost.
还需要以下配置:
添加用户:admin 123456分别代表添加用户的用户名密码:
rabbitmqctl add_user admin 123456
设置刚才添加的admin用户为管理员:
abbitmqctl set_user_tags admin administrator
如下图:
设置访问权限:
rabbitmqctl set_permissions -p / admin "." "." ".*"
如下图:
重启服务:
systemctl restart rabbitmq-server
最后大功告成: