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

管理员界面如下图所示:

相关推荐
回家路上绕了弯1 天前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户8307196840822 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840823 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者5 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者7 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧8 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖8 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农8 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者8 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀8 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式