MQ基础
一,RabbitMQ的框架图
publisher:生产者,也就是发送消息的一方。
consumer:消费者,也就是消费消息的一方。
queue:队列,存储消息。生产者投递的消息回暂存在消息队列中,等待消费者处理。
exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange ,queue.
二,RabbitMQ的五种模式及能够达到的效果
1. 简单模式发送消息
简单模式模型图:
- publisher直接发送消息到队列
- consumer监听并处理队列中的消息
效果图:
2.WorkQueues模型发送消息
WorkQueues模型图:
当消息处理比较耗时的时候,可能生产消息的速度远大于消息的消费速度,长此以往,消息就会堆积越来越多,无法及时处理。此时可以使用work模型,多个消费者共同处理消息,消息处理的速度就能大大提高。
效果图:
由效果图可以看出,两个消费者监听到的数据是一样多的,也就是说消息是平均分配给每个消费者,并没有考虑到消费者的处理能力。导致1个消费者空闲,另一个消费者忙的不可开交。没有充分利用每一个消费者的能力,最终消息处理的耗时远远超过了1秒。这样显然是有问题的。
解决此问题也简单,就是在Consumer服务的application.yml文件中加入如下配置:
点击查看代码
spring:
rabbitmq:
listener:
simple:
prefetch: 1
3.Fanout交换机
Fanout模型图:
- 可以有多个队列
- 每个队列都要绑定到Exchange(交换机)
- 生产者发送的消息,只能发送到交换机
- 交换机把消息发送给绑定过的所有队列
- 订阅队列的消费者都能拿到消息
效果图:
本模式有点像是广播模式,群发消息。
4.Direct交换机
Direct模型图:
- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
- 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey。
- Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息
效果图:
5.Topic交换机
Topic模型图:
Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。
只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!
通配符规则:
(#)匹配一个或多个词
(*)匹配不多不少恰好1个词
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)