RabbitMQ 消息模型

参考 ​​​​​​【RabbitMQ】RabbitMQ架构模型_rabbitmq结构模型-CSDN博客


之前的学习都只是知道名字,但并没有真正的理解,每次看还是不懂,所以今日理解透 !

RabbitMQ 收发消息过程如下:

首先从消费者开始:

每个消费者都有一个自己的队列,每个消费者都从自己的队列中取消息 消费。

消费者代码表示如下:

直接就是监听一个队列

org.springframework.amqp.rabbit.annotation.RabbitListener

生产者将消息发给交换机,交换机将消息发给 队列

下图:p 为生产者,x 为交换机

消费者不与队列交互,只给交换机发送,交换机再把消息转发给指定队列,消费者监听到自己的队列有消息了,就可以消费了。

那么 交换机如何知道要把 消息转发给 那个或哪些队列呢?

首先可能存在多个交换机,所以 队列是需要绑定到交换机的,交换机转发消息时 可选择的队列列表 只能是绑定到它的 队列。

然后怎么知道转发到哪个队列呢?

这得看交换机类型:Fanout 广播、Direct 定向、Topic 通配符

1. Fanout 广播交换机

广播就是将消息转发给 绑定到该交换机的 全部队列上。

2. Direct 定向交换机

模型如上:

首先 队列绑定到交换机的时候 需要同时指定一个 bindingKey

如图:C1 的 bindingKey 是 error; C2 的 bindingKey 是 info、error、warning;

然后,生产者发送消息的时候就要传这个值了:比如 传一个 info,那么 交换机就会把消息转发给 绑定了 info 的队列 C2 上。

生产者传的这个值 叫做 routingKey 路由key

消费者绑定交换机的值叫做 bindingKey 绑定key

所以消费者最终发的消息是:消息要发给哪个交换机的哪个 bindingKey 的队列上。

(消费者传参时参数叫做 routingKey,实际上是和 bindingKey 相等的,叫法不同)

3. Topic 通配符交换机

通配符交换机可以解析 routingKey 上的通配符,来转发消息

看看代码如何表示以上关系

1. 定义交换机

直接通过Builder 可以构造出不同类型的交换机

2. 定义队列

3. 队列和交换机绑定

4. 发送消息

如图发了一个延迟消息

发送消息时,第一个参数指定交换机,第二个参数指定routingKey,第三个参数为要发送的消息内容

相关推荐
j7~2 分钟前
【Redis】《一文走完服务端高并发架构演进:从单机架构到 K8S 容器编排》
分布式·架构演进·服务端高并发分布式结构演进之路·架构基本概念·架构评价指标
Flynt25 分钟前
把 bug tracker 塞进 git 仓库,同步和冲突怎么解决?我把 git-bug 拆开实测了一遍
分布式·git·开源
灯澜忆梦17 小时前
【RabbitMQ #3】 | Go 客户端 + SpringAMQP
分布式·golang·rabbitmq
Q26433650231 天前
【有源码】基于Spark的电商客户细分与盈利洞察分析系统-面向精准营销的电商客户细分模型构建与盈利能力可视化研究
大数据·hadoop·分布式·数据挖掘·数据分析·spark·毕业设计
晴空蓝天1 天前
RabbitMQ 消息可靠投递:confirm 确认 + 消费重试 + 死信队列
rabbitmq
驭渊的小故事1 天前
RabbitMQ 环境配置和 DirectRabbitConfig 的 SpringBoot 4.0.X 版本
spring boot·rabbitmq·java-rabbitmq
新思维软件1 天前
基于无线传输的地衡系统:三节点 LoRa 组网与 MQTT 上云的分布式称重方案
分布式·stm32·单片机·嵌入式硬件·物联网·物联网开发
俊哥大数据1 天前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
宸津-代码粉碎机1 天前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
程序猿乐锅1 天前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存