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

管理员界面如下图所示:

相关推荐
西***63473 小时前
从信号处理到智能协同:高清混合矩阵全链路技术拆解,分布式系统十大趋势抢先看
网络·分布式·矩阵
阿维的博客日记3 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
好玩的Matlab(NCEPU)3 小时前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
好玩的Matlab(NCEPU)4 小时前
消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
kafka·rabbitmq·activemq
笨蛋少年派7 小时前
zookeeper简介
分布式·zookeeper·云原生
鸽鸽程序猿8 小时前
【RabbitMQ】简介
分布式·rabbitmq
在未来等你8 小时前
Kafka面试精讲 Day 29:版本升级与平滑迁移
大数据·分布式·面试·kafka·消息队列
在未来等你8 小时前
Kafka面试精讲 Day 30:Kafka面试真题解析与答题技巧
大数据·分布式·面试·kafka·消息队列
在未来等你10 小时前
Elasticsearch面试精讲 Day 30:Elasticsearch面试真题解析与答题技巧
大数据·分布式·elasticsearch·搜索引擎·面试