【消息队列】RabbitMQ基本认识

目录

一、基本概念

[1. 生产者(Producer)](#1. 生产者(Producer))

[2. 消费者(Consumer)](#2. 消费者(Consumer))

[3. 队列(Queue)](#3. 队列(Queue))

[4. 交换器(Exchange)](#4. 交换器(Exchange))

[5. 绑定(Binding)](#5. 绑定(Binding))

[6. 路由键(Routing Key)](#6. 路由键(Routing Key))

[7. 消息确认(ACK)](#7. 消息确认(ACK))

[8. 持久化(Durability)](#8. 持久化(Durability))

[9. 虚拟主机(Virtual Host)](#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.# 匹配 orderorder.paidorder.paid.email)。

    • 绑定键格式为用.分隔的多级路径(如 user.notification.email)。

  • 典型场景

    • 多维度事件分类(如日志分级 error.*warning.*)。

    • 动态路由(如根据用户行为类型+地区分发消息 action.purchase.us)。

    • 订单状态多级处理(如 order.*.failed 匹配所有失败类型)。

一句话通配符匹配路由键,按层级灵活分发。



四、数据隔离

给不同的项目创建不同的用户,然后不同的用户使用不同的虚拟主机,这样就达成了数据的隔离。

1、添加新用户


2、查看用户列表


3、切换到新用户,并创建虚拟主机。

(注意:创建的虚拟主机直接就属于当前登录用户的)

查看虚拟主机:


4、回交换机看看

相关推荐
LUCIAZZZ6 分钟前
JVM之虚拟机运行
java·jvm·spring·操作系统·springboot
what_201810 分钟前
分布式1(cap base理论 锁 事务 幂等性 rpc)
分布式
hello_ejb314 分钟前
聊聊JetCache的缓存构建
java·前端·缓存
只因只因爆24 分钟前
spark小任务
大数据·分布式·spark
cainiao08060531 分钟前
Java 大视界——Java 大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
java·大数据·开发语言
chxii38 分钟前
6.2字节流
java·开发语言
不务专业的程序员--阿飞1 小时前
【SQL 如何解锁递归】
java·数据库·sql
嘵奇1 小时前
Spring Boot拦截器详解:原理、实现与应用场景
java·spring boot·后端
八股文领域大手子1 小时前
Java死锁排查:线上救火实战指南
java·开发语言·面试
jackson凌1 小时前
【Java学习笔记】finalize方法
java·笔记·学习