RabbitMQ简单介绍和安装

RabbitMQ简单介绍

一.RabbitMQ介绍

RabbitMQ 是一款开源的 消息中间件(Message Broker),遵循 AMQP(Advanced Message Queuing Protocol) 协议标准,专为分布式系统提供高效、可靠的消息通信机制。它通过解耦生产者和消费者、异步处理、流量削峰等能力,成为构建复杂企业级应用的核心组件之一。

RabbitMQ通常用于通信系统通信,系统通信又分为两种:

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

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

二.RabbitMQ的作用

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

1.异步解耦

异步:生产者(发送消息的一方)和消费者(接收消息的一方)无需在同一时间点进行交互。生产者发送消息后即可继续执行后续逻辑,无需等待消费者处理完成。

解耦:生产者和消费者之间不直接依赖对方的接口或状态,而是通过消息队列间接通信。双方只需遵循消息协议,无需了解彼此的实现细节。

简单的举个栗子:

用户进行注册操作时,在这里分成3个步骤,第1个步骤是用户的信息校验,第2个步骤插入数据库,第3个步骤发送邮件。此时前两步已经完成了用户注册操作了,此时第三步就能够解耦出来,将第3步发送给MQ,再让MQ 将信息转发给用户的邮箱。

理解:

用户在前两步已经完成注册了,无论邮件是否能够到达用户的邮箱其实都不太重要,重要的是将用户注册的这个信息存入服务器的数据库当中。

2.流量削峰

流量削峰是 RabbitMQ 的核心应用场景之一,主要用于应对系统突发的高并发请求,避免后端服务因瞬时压力过大而崩溃。其核心思想是通过消息队列暂存请求,让后端服务按照自身处理能力逐步消费。

简单的举个栗子:

当在抢火车票时,点击火车票后提交订单,此时会出现正在排队中请勿退出界面这种弹窗,这种排队就是在使用流量削峰的功能。

3.消息分发

消息分发是 RabbitMQ 的核心能力,它决定了消息如何从生产者传递到消费者。其核心逻辑是:生产者将消息发送到交换机(Exchange),交换机根据规则(路由键、绑定关系)将消息路由到队列,消费者从队列中获取消息。

简单的举个栗子:

用户下了一个订单之后,平台需要向商家发送一个信息,也需要向平台的财部门发送信息,此时不使用MQ的消息分发就只能通过分别调用两个接口来进行消息的通知,并且还可能会涉及到轮询数据库的操作。

4.延迟通知

延迟通知是 RabbitMQ 中实现 定时任务 或 延迟触发业务逻辑 的核心功能,例如订单超时未支付自动取消、提醒消息延迟发送等。由于 RabbitMQ 本身不直接支持延迟队列,需通过 插件 或 死信队列(DLX) 间接实现。

简单举个栗子:

电商平台,用户下了订单之后,如果此时并没有对这个订单进行支付,此时就会有一个时间限制,如果超过这个时间限制,用户还没有对这个订单进行付款,此时这个订单就会自动取消。

三.RabbitMQ安装(Ubuntu)

1.先安装Erlang

首先先进行资源包的更新:sudo apt-get update

安装erlang的语言:sudo apt-get install erlang

检查erlang是否安装成功:erl

如果出现这个就是安装成功,并且通过 halt(). 进行退出,注意是有一个小点

2.安装RabbitMQ

安装RabbitMQ命令:sudo apt-get install rabbitmq-server

确认安装结果的命令:systemctl status rabbitmq-server

3.安装RabbitMQ的管理界面

安装管理界面的命令 rabbitmq-plugins enable rabbitmq_management

若服务器未启动,则启动命令 sudo service rabbitmq-server start

通过IP和port进行访问 公网IP + 15672进行访问,如果不行需要在云服务器上加安全组开放端口:

rabbitmq从3.3.0开始禁⽌使⽤guest/guest权限通过除localhost外的访问

添加管理员用户:

rabbitmqctl add_user {账号} {密码}

rabbitmqctl add_user admin(账号) admin(密码)

给用户添加权限:

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

rabbitmqctl set_user_tags admin administrator

权限:

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

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

  2. Policymaker策略制定者,可登陆管理控制台(启⽤managementplugin的情况下),同时可以对policy进⾏管理。但⽆法查看节点的相关信息.

  3. Management普通管理者,仅可登陆管理控制台(启⽤managementplugin的情况下),⽆法看到节点信息,也⽆法对策略进⾏管理.

  4. Impersonator模拟者,⽆法登录管理控制台。

  5. None其他⽤⼾,⽆法登陆管理控制台,通常就是普通的⽣产者和消费者。

登录后的界面:

红色区域是可以点击来修改当前账号的管理权限等信息:

Add User则是可以添加新的账号和密码

4.创建虚拟机


进行添加一个新的虚拟机:
当前登录的用户是哪个,这个虚拟机的权限就是哪个用户的,通过点击Name可以进行删除:

可以通过用户来进行设置虚拟机权限:


或者通过虚拟机进行设置用户权限,clear是情况用户权限:

5.端口号信息

amqp 5672:客户端和服务器建立连接的端口号

Http 15672:管理界面的端口号

clustering 25672:集群使用的端口号

四.工作原理图

producer : 生产者(客户端)

consumer: 消费者(客户端)

中间的都是RabbitMQ的服务器

生产者和消费者通过Connection和RabbitMQ服务器进行连接。

一个Connection有多个Channel,一个Broker可以有多个虚拟机,Exchange是交换机,Queue是队列。

生产者将消息发送给Exchange(交换机),而不会直接发送给Queue(队列)。

相关推荐
RainbowSea4 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea4 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
ChinaRainbowSea9 小时前
1. 初始 RabbitMQ 消息队列
java·中间件·rabbitmq·java-rabbitmq
千层冷面11 小时前
RabbitMQ 发送者确认机制详解
分布式·rabbitmq·ruby
ChinaRainbowSea11 小时前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
hycccccch21 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
陈平安Java and C1 天前
RabbitMQ应用2
rabbitmq
RainbowSea1 天前
4. RabbitMQ 发布确认的配置详细说明
java·消息队列·rabbitmq
雨会停rain1 天前
如何提高rabbitmq消费效率
分布式·rabbitmq