RabbitMQ 概述与安装
MQ 作用与介绍
MQ 是什么
MQ (message queue),从字面意思看是一个队列, FIFO 先进先出,只不过里面存放的内容是 消息
消息 可以比较简单,比如只包含 文本字符串,JSON 等;也可以很复杂,比如 内嵌对象 等
MQ 多用于分布式系统之间进行通信
系统之间的调用通常有两种方式:
1.同步通信
直接调用对方的服务,数据从一端发出后立即就可以到达另一端
2.异步通信
数据从一端发出后,先进入一个容器进行临时存储,当达成某个条件时,再由这个容器发送给另一端.
容器的一个具体实现就是 MQ (message queue)
MQ 作用
MQ 主要工作是接收并转发消息
1.异步解耦
在业务流程中, 一些操作可能非常耗时, 但并不需要即时返回结果. 可以借助MQ把这些操作异步化, 比如用户注册后发送注册短信或邮件通知, 可以作为异步任务处理, 而不必等待这些操作完成后才告知用户注册成功
2.流量削峰
在访问量剧增的情况下, 应用仍然需要继续发挥作用 但是这样的突发流量并不常见. 如果以能处理这类峰值为标准而投⼊资源,无疑是巨大的浪费. 使用MQ能够使关键组件支撑突发访问压力, 不会因为突发流量而崩溃. 比如秒杀或者促销活动, 可以使用MQ来控制流量, 将请求排队, 然后系统根据自己的处理能力逐步处理这些请求
3.消息分发
当多个系统需要对同⼀数据做出响应时, 可以使用MQ进行消息分发. 比如支付成功后, 支付系统可以向MQ发送消息, 其他系统订阅该消息, 而无需轮询数据库
4.延迟通知
在需要在特定时间后发送通知的场景中, 可以使用MQ的延迟消息功能, 比如在电子商务平台中,如果用户下单后⼀定时间内未支付,可以使用延迟队列在超时后自动取消订单
..
MQ 选择
目前有很多的MQ产品, 例如RabbitMQ, RocketMQ, ActiveMQ, Kafka, ZeroMQ等, 也有直接使用Redis充当消息队列的案例, 这些消息队列, 各有侧重
1.Kafka
Kafka⼀开始的目的就是用于日志收集和传输,追求高吞吐量, 性能卓越, 单机吞吐达到十万级, 在日志领域比较成熟, 功能较为简单,主要支持简单的 MQ 功能
2.RocketMQ
在设计时借鉴了Kafka,并做出了⼀些自己的改进, 可用性、可靠性以及稳定性等方面都有出色的表现. 适合对于可靠性比较高,且并发比较大的场景. 但支持的客户端端语言不多, 且社区活跃度一般
3.RabbitMQ
采用Erlang语言开发, MQ 功能比较完备, 且几乎支持所有主流语言,开源提供的界面也非常友好, 性能较好, 吞吐量能达到万级, 社区活跃度也比较高
RabbitMQ 介绍
RabbitMQ 实现了 AMQP 的 消息队列 服务
AMQP Advanced Message Queuing Protocol (高级消息队列协议)
是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计
基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间件,开发语言等条件的限制
RabbitMQ 安装
RabbitMQ已经包含在标准的Ubuntu仓库中, 然而包含的版本通常比最新的RabbitMQ发行版落后很多,可能提供的RabbitMQ版本已经不支持. RabbitMQ团队制作了自己的软件包,并使用Cloudsmith进行分发
具体操作可参考 : RabbitMQ
由于上述方法过于复杂,所以此处 使用 Ubuntu 仓库中的版本来安装
1.安装 Erlang
RabbitMQ 需要 Erlang 语言的支持,在安装 RabbitMQ 之前需要先安装 Erlang
#更新软件包
sudo apt-get update
#安装 Erlang
sudo apt-get install erlang
#查看 Eralng 版本
sudo apt-get install erlang
#退出命令
halt().
2.安装 RabbitMQ
#更新软件包
sudo apt-get update
#安装 RabbitMQ
sudo apt-get install rabbitmq-server
#安装结果确认
systemctl status rabbitmq-server
(此处出现 active 即为成功)
3.安装 RabbitMQ 管理界面
#默认是不安装管理界面的
rabbitmq-plugins enable rabbitmq_management
4.启动服务并访问
1. 启动服务
#启动 RabbitMQ
sudo service rabbitmq-server start
2. 通过 IP : port 访问管理界面
http://云服务器IP:15672
15672 为默认端口号,云服务器需要开启端口
默认用户名和密码都是 guest
RabbitMQ 从 3.3.0 开始禁止使用 guest/guest 权限通过除 localhost 外的访问
此处需要添加新的管理员用户
3. 添加管理员用户
#添加用户 admin,密码 admin
rabbitmqctl add_user admin admin
#给用户添加权限
rabbitmqctl set_user_tag admin administrator
#通过 IP : port 访问,使用刚才设置的用户名和密码登录
浏览器 http://云服务器IP:15672
管理员界面如下图所示: