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,第三个参数为要发送的消息内容

相关推荐
P.H. Infinity5 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
WX187021128737 小时前
在分布式光伏电站如何进行电能质量的治理?
分布式
不能再留遗憾了10 小时前
RabbitMQ 高级特性——消息分发
分布式·rabbitmq·ruby
茶馆大橘10 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
材料苦逼不会梦到计算机白富美13 小时前
golang分布式缓存项目 Day 1
分布式·缓存·golang
想进大厂的小王13 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
Java 第一深情13 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
许苑向上14 小时前
【零基础小白】 window环境下安装RabbitMQ
rabbitmq
ZHOU西口15 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
zmd-zk15 小时前
kafka+zookeeper的搭建
大数据·分布式·zookeeper·中间件·kafka