【消息队列】RabbitMQ基本认识
目录
一、基本概念
1. 生产者(Producer)
2. 消费者(Consumer)
3. 队列(Queue)
4. 交换器(Exchange)
5. 绑定(Binding)
6. 路由键(Routing Key)
7. 消息确认(ACK)
8. 持久化(Durability)
9. 虚拟主机(Virtual Host)
二、认识MQ控制台及基本操作
1、MQ系统预设的交换机:
2、创建交换机
3、创建队列
4、将交换机与队列绑定(路由)编辑
5、发送消息
6、查看队列中的消息编辑
三、交换机类型
1、Fanout交换机
2、Direct交换机
3、Topic交换机
四、数据隔离
1、添加新用户
2、查看用户列表
3、切换到新用户,并创建虚拟主机。
4、回交换机看看
大家好,今天给大家分享RabbitMQ。MQ呢可以看作一个中间者,我们给MQ发送一条消息,然后其他服务就可以从MQ获取到消息并执行相应的业务。这样的好处就是可以达到异步处理,生产消息的一方只需要把消息发送给MQ即可,无需再关注后续操作,可以继续执行自己的业务。
一、基本概念
下面一些交换机的概念后面会讲,比如路由键什么的如果第一次看不懂没关系
1. 生产者(Producer)
-  发送消息的应用,将消息发布到 RabbitMQ 的 交换器。 
2. 消费者(Consumer)
-  接收消息的应用,从 队列 中订阅并处理消息。 
3. 队列(Queue)
-  存储消息的缓冲区,消息会被暂存在队列中,直到被消费者处理。 
-  特性:可声明为持久化(重启后保留)、独占(仅限当前连接)或自动删除(无消费者时删除)。 
4. 交换器(Exchange)
-  接收生产者发送的消息,并根据规则(绑定、路由键)将消息路由到队列。 
-  常用类型: -  Direct:精确匹配路由键。 
-  Fanout:广播到所有绑定队列。 
-  Topic:基于通配符匹配路由键(如 logs.*)。
-  Headers:通过消息头属性匹配(不常用)。 
 
-  
5. 绑定(Binding)
-  连接交换器和队列的规则,定义消息如何从交换器路由到队列。 
6. 路由键(Routing Key)
-  生产者发送消息时指定的键,交换器根据此键决定消息路由到哪些队列。 
7. 消息确认(ACK)
-  手动确认(Manual Acknowledgement):消费者处理完消息后需显式发送 ACK,RabbitMQ 才会从队列删除消息。 
-  自动确认(Auto ACK):消息发送后立即删除,可能导致消息丢失(不推荐生产环境使用)。 
8. 持久化(Durability)
-  队列持久化:声明队列时设置 durable=true,重启后队列保留。
-  消息持久化:发送消息时设置 delivery_mode=2,确保消息写入磁盘(需配合持久化队列生效)。
9. 虚拟主机(Virtual Host)
-  逻辑隔离单元,类似独立环境。不同虚拟主机的交换器、队列等资源互相隔离。 
二、认识MQ控制台及基本操作
1、MQ系统预设的交换机:

2、创建交换机

3、创建队列

4、将交换机与队列绑定(路由)
 
 

完成:

5、发送消息
想交换机发送消息,交换机会根据它自己的类型,将消息路由发送到与他绑定的队列中

6、查看队列中的消息
 
 

三、交换机类型
1、Fanout交换机
-  作用:广播消息,将消息无条件发送到所有绑定的队列。 
-  特点: -  完全忽略路由键(Routing Key)。 
-  每条消息会被复制到所有关联队列。 
 
-  
-  典型场景: -  群发通知(如系统广播)。 
-  日志分发到多个消费者。 
-  事件驱动架构中的多服务同步处理。 
 
-  
一句话:无脑广播,一人发送,全员队列接收。
2、Direct交换机
-  作用:精确匹配路由键,将消息发送到与路由键完全一致的绑定队列。 
-  特点: -  消息的路由键(Routing Key)必须与队列的绑定键(Binding Key)完全相同。 
-  一对一或多对一投递(如多个队列绑定相同键时,消息会复制到这些队列)。 
 
-  
-  典型场景: -  任务分发(如按任务类型路由到特定队列)。 
-  订单系统中按订单状态分类处理。 
-  需要严格匹配规则的场景(如支付成功/失败消息分离)。 
 
-  
一句话:按键精准投递,一对一或多对一,严格匹配。
示例:在控制台中创建交换机,并设置绑定关系


3、Topic交换机
-  作用:基于通配符模式匹配路由键,实现灵活的多条件路由。 
-  特点: -  路由键支持通配符: -  *:匹配一个单词(如order.*匹配order.paid,不匹配order.paid.email)。
-  #:匹配零或多个单词(如order.#匹配order、order.paid、order.paid.email)。
 
-  
-  绑定键格式为用 .分隔的多级路径(如user.notification.email)。
 
-  
-  典型场景: -  多维度事件分类(如日志分级 error.*、warning.*)。
-  动态路由(如根据用户行为类型+地区分发消息 action.purchase.us)。
-  订单状态多级处理(如 order.*.failed匹配所有失败类型)。
 
-  
一句话:通配符匹配路由键,按层级灵活分发。
四、数据隔离
给不同的项目创建不同的用户,然后不同的用户使用不同的虚拟主机,这样就达成了数据的隔离。
1、添加新用户

2、查看用户列表

3、切换到新用户,并创建虚拟主机。
(注意:创建的虚拟主机直接就属于当前登录用户的)

查看虚拟主机:

4、回交换机看看

