前言
RabbitMQ 是一个实现了 AMQP(高级消息队列协议)的消息队列服务,是当前主流的消息中间件之一。在互联网架构中,经常使用 MQ 作为消息通信服务。
消息队列(MQ)的基本概念、作用及选型理由,重点讲解了在 Ubuntu 环境下安装 RabbitMQ 的完整流程。内容涵盖 MQ 的定义、异步解耦、流量削峰等功能,对比了 Kafka 与 RocketMQ,详细列出了安装 Erlang 依赖、部署 RabbitMQ 服务、启用管理插件以及配置管理员用户和权限的具体命令步骤,帮助开发者快速搭建消息中间件环境。

RabbitMQ 是一个实现了 AMQP(高级消息队列协议)的消息队列服务,是当前主流的消息中间件之一。在互联网架构中,经常使用 MQ 作为消息通信服务。
AMQP(Advanced Message Queuing Protocol),即高级消息队列协议,是一个通用的应用层协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端或中间件、开发语言等条件的限制。
MQ(Message Queue),从字面意思上看,本质是个队列,FIFO(先进先出),只不过队列中存放的内容是消息(message)而已。消息可以非常简单,比如只包含文本字符串、JSON 等,也可以很复杂,比如内嵌对象。
系统之间的调用通常有两种方式:
RabbitMQ 就是 MQ 的一种实现。
例如:打电话客服直接响应;客服记录下来,过一段时间(24 小时)内进行回复。
MQ 主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用。
可以把 MQ 想象成一个仓库。采购部门进货之后,把零件放进仓库里,生产部门从仓库中取出零件,并加工成产品。MQ 和仓库的区别是,仓库里放的是物品,MQ 里放的是消息。仓库负责存储物品,并转发物品,MQ 负责存储和转发消息。
在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果。可以借助 MQ 把这些操作异步化,比如用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功。
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用 MQ 能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃。比如秒杀或者促销活动,可以使用 MQ 来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求。
例如:12306 节假日的时候进行买票(不可能在这个时候买入多台机器);商场人多的时候进行排队。
当多个系统需要对同一数据做出响应时,可以使用 MQ 进行消息分发。比如支付成功后,支付系统可以向 MQ 发送消息通知订单系统发货。
利用 MQ 的延迟特性,可以实现定时任务或延迟通知功能,例如订单超时未支付自动取消。
常见的消息队列有 Kafka、RocketMQ 和 RabbitMQ。
确保 Ubuntu 系统已更新,并安装必要的依赖工具。
sudo apt-get update
sudo apt-get install curl gnupg software-properties-common
RabbitMQ 运行依赖于 Erlang 虚拟机(BEAM)。需要先安装 Erlang。
# 添加 Erlang 解决方案仓库
add-apt-repository ppa:erlang-solutions/erlang-solutions
sudo apt-get update
# 安装 Erlang
sudo apt-get install erlang-nox
确认 Erlang 是否安装成功。
erl -version
添加 RabbitMQ 官方 GPG 密钥并安装。
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/rabbitmq-archive-keyring.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt-get update
sudo apt-get install rabbitmq-server
检查服务状态。
systemctl status rabbitmq-server
启用 RabbitMQ 自带的 Management 插件。
sudo rabbitmq-plugins enable rabbitmq_management
默认端口为 15672。在浏览器输入 http://<服务器IP>:15672。
创建新用户并赋予管理员权限。
sudo rabbitmqctl add_user admin password
sudo rabbitmqctl set_user_tags admin administrator
设置用户对虚拟主机(vhost)的读写权限。
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
打开浏览器访问管理页面,输入用户名 admin 和密码 password 登录。
如需修改权限,可使用 set_permissions 命令。
使用 add_user 命令添加其他普通用户。
RabbitMQ 中的虚拟主机(Virtual Host)用于隔离不同项目或租户的资源。
sudo rabbitmqctl add_vhost my_vhost
至此,RabbitMQ 基础环境搭建完成。后续可根据业务需求配置交换机、队列及绑定关系。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online