【RabbitMQ】基本概念以及安装教程

1. 什么是MQ

MQ( Message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是消息(message)而已.消息可以非常简单,比如只包含文本字符串,JSON等,也可以很复杂,比如内嵌对象.MQ多用于分布式系统之间进行通信

系统之间的调用通常有两种方式: 一种是同步通信 另外一种是 异步通信

同步通信

同步通信就是直接调用对方的服务,数据从一端发出后立即就可以达到另一端。

异步通信

数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端.容器的一个具体实现就是MQ(message queue)

而Rabbit是MQ的一种实现

2. MQ的作用

MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用。

  • 1.异步解耦: 在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果,可以借助MO把这些操作异步化,比如 用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功.
  • 2.流量削峰: 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见.如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费,使用MO能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀或者促销活动,可以使用MQ来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求.
  • 3.消息分发:当多个系统需要对同一数据做出响应时,可以使用MQ进行消息分发,比如支付成功后,支付系统可以向MQ发送消息,其他系统订阅该消息,而无需轮询数据库.
  • 4.延迟通知: 在需要在特定时间后发送通知的场景中,可以使用MQ的延迟消息功能,比如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单

3. MQ产品对比

M的实现肯定不止RabbitMQ一种,在使用的时候可以根据自己的业务需求和使用场景来选择最适合自己的技术。

  1. Kafka

Kafka一开始的目的就是用于日志收集和传输 ,追求高吞吐量 ,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能 ,如果有日志采集需求,肯定是首选kafka了。

2.RocketMQ

RocketMQ采用Java语言开发,由阿里巴巴开源,后捐赠给了Apache.它在设计时借鉴了Kafka,并做出了一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在可用性、可靠性以及稳定性 等方面都有出色的表现,适合对于可靠性比较高,且并发比较大的场景,比如互联网金融,但支持的客户端语言不多,且社区活跃度一般

  1. RabbitMO

采用Erlang语言开发,MQ功能比较完备,且几乎支持所有主流语言 ,开源提供的界面也非常友好,性能较好**,吞吐量能达到万级,社区活跃度也比较高**,比较适合中小型公司,数据量没那么大,且并发没那么高的场景.

其实Rabbit的性能来说并算不上是顶尖的,但是其几乎支持所有语言,并且他有着很完善的社区,作为开发者在使用的过程中可以通过社区交流来解决自己使用技术的时候遇到的困难,这一点也是十分关键的。此外RabbitMQ的管理界面也是十分友好的.

4. RabbitMQ介绍

RabbitMQ 官⽹: RabbitMQ: One broker to queue them all | RabbitMQhttps://www.rabbitmq.com/RabbitMQ是采用Erlang语言实现 **AMQP(Advanced Message QueuingProtocol,高级消息队列协议)**的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.

4.1 RabbitMQ安装(Ubuntu系统)

首先要在我们的服务器上安装erlang,毕竟Rabbit是使用Erlang来写的嘛,就像我们使用Java程序需要安装JDK是一样的道理。

bash 复制代码
#更新软件包
sudo apt-get update
#安装erlang
sudo apt-get install erlang

使用 erl 命令查看erlang版本,出现上面的信息后就可以进行RabbitMQ的安装了。

安装RabbitMQ

bash 复制代码
#更新软件包
sudo apt-get update
#安装rabbitmq
sudo apt-get install rabbitmq-server
#确认安装结果
systemctl status rabbitmq-server

完成安装后,使用查看RabbitMQ的安装状态:# systemctl status rabbitmq-server

安装RabbitMQ的管理界面:rabbitmq-plugins enable rabbitmq_management

4.2 启动服务并访问

启动服务

bash 复制代码
sudo service rabbitmq-server start

通过IP:port访问界面

http://yourIP:15672/ 为默认端⼝号,云服务器需要开启端口
这里默认的用户名和密码都是guest,
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除 localhost 外的访问,那么就添加管理员用户吧。

4.3 添加管理员用户

操作RabbitMQ可以通过**代码 或者界面 或者通过命令操作[rabbitmqctl] ,**这里和我们熟悉的MySQL因为是挺像的。

添加用户admin 密码 password

bash 复制代码
# rabbitmqctl add_user ${账号} ${密码}
rabbitmqctl add_user admin admin

给用户添加权限

rabbitmqctl set_user_tags ${ 账号 } ${ ⻆⾊名称 }

rabbitmqctl set_user_tags admin administrator

以下角色可选

RabbitMQ用户角色分为Administrator、Monitoring、Policymaker、Management、Impersonator、None共六种角色

1.Administrator 超级管理员,可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作

2.Monitoring监控者,可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmg节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。

3.Policymaker 策略制定者,可登陆管理控制台(启用management plugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息.

4.Management 普通管理者,仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理.

5.lmpersonator模拟者,无法登录管理控制台。

6.None 其他用户,无法登陆管理控制台,通常就是普通的生产者和消费者

# 访问

相关推荐
cnsxjean7 小时前
SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传
java·前端·spring boot·分布式·后端·中间件·架构
桃园码工13 小时前
3-测试go-redis+redsync实现分布式锁 --开源项目obtain_data测试
redis·分布式·golang
sx_170613 小时前
Spark面试题
大数据·分布式·spark
wclass-zhengge15 小时前
02微服务系统与设计(D1_走出微服务误区:避免从单体到分布式单体)
分布式·微服务·架构
ZOMI酱15 小时前
【AI系统】分布式通信与 NVLink
人工智能·分布式
scc214018 小时前
kafka学习-02
分布式·学习·kafka
xidianjiapei00118 小时前
Kafka Transactions: Part 1: Exactly-Once Messaging
分布式·kafka·消息系统·exactly-once语义·精确一次语义
zmd-zk18 小时前
kafka生产者和消费者命令的使用
大数据·分布式·学习·kafka
Francek Chen20 小时前
【大数据分析&深度学习】在Hadoop上实现分布式深度学习
人工智能·hadoop·分布式·深度学习·数据分析
雪碧聊技术21 小时前
RabbitMQ5:Fanout交换机、Direct交换机、Topic交换机
网络·rabbitmq·fanout交换机·direct交换机·topic交换机