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

管理员界面如下图所示:

相关推荐
小江的记录本6 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
身如柳絮随风扬13 小时前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
AIMath~15 小时前
雪花算法+ZooKeeper解决方案+RPC是什么
分布式·zookeeper·云原生
KmSH8umpK15 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第六篇
数据库·redis·分布式
空中海16 小时前
Kafka :存储、复制与可靠性
分布式·kafka·linq
渣渣盟17 小时前
构建企业级实时数据管道:Kafka + Flink 最佳实践
分布式·flink·kafka
KmSH8umpK18 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第四篇
数据库·redis·分布式
KmSH8umpK18 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第五篇
数据库·redis·分布式
卧室小白19 小时前
ceph-分布式存储
分布式
aXin_ya19 小时前
微服务第九天 分布式缓存(Redis)
分布式·缓存·微服务