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

  1. 通过 IP : port 访问管理界面

http://云服务器IP:15672

15672 为默认端口号,云服务器需要开启端口

默认用户名和密码都是 guest

RabbitMQ 从 3.3.0 开始禁止使用 guest/guest 权限通过除 localhost 外的访问

此处需要添加新的管理员用户

  1. 添加管理员用户

#添加用户 admin,密码 admin

rabbitmqctl add_user admin admin

#给用户添加权限

rabbitmqctl set_user_tag admin administrator

#通过 IP : port 访问,使用刚才设置的用户名和密码登录

浏览器 http://云服务器IP:15672

管理员界面如下图所示:

相关推荐
HanhahnaH23 分钟前
Spark 任务如何实现幂等?
大数据·分布式·spark
江畔柳前堤20 小时前
云原生 × AI 全景图谱:从 Kubernetes 到 Agent 基础设施的一次认知跃迁
人工智能·分布式·gpt·云原生·kubernetes·原型模式·agi
Thomas21431 天前
kafka 存储flink changelog两种方式和形态
分布式·flink·kafka
GIR1231 天前
首发:2026年分布式储能系统市场分析报告——覆盖发展前景、占有率与十五五规划
分布式
leo_messi941 天前
面试知识点梳理及相关面试题(十六)-- 分布式设计
分布式·面试·职场和发展
IT大白鼠1 天前
MySQL 分布式集群系列 · 第四篇——实操部署指南:从零搭建生产级 MySQL NDB 集群
数据库·分布式·mysql
IT大白鼠1 天前
MySQL 分布式集群系列 · 第三篇——核心原理精讲:NDB 自动分片、多主写入与数据同步
数据库·分布式·mysql
星恒讯工业路由器2 天前
分布式光伏站点分散难联网?4G/5G点对多点自组网方案解析
分布式·物联网·5g·分布式光伏·自组网·点对多点通信·4g/5g
qq_452396232 天前
第十一篇:《eBPF 进阶:自定义探针与生产级可观测性部署》
分布式
重庆小透明2 天前
Kafka 完全指南:从基础组件到核心原理(包含面试题)
java·分布式·微服务·架构·kafka