MQ基础

一,RabbitMQ的框架图

image
publisher:生产者,也就是发送消息的一方。
consumer:消费者,也就是消费消息的一方。
queue:队列,存储消息。生产者投递的消息回暂存在消息队列中,等待消费者处理。
exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange ,queue.

二,RabbitMQ的五种模式及能够达到的效果

1. 简单模式发送消息

简单模式模型图:
image

  • publisher直接发送消息到队列
  • consumer监听并处理队列中的消息
    效果图:
    image

2.WorkQueues模型发送消息

WorkQueues模型图:
image
当消息处理比较耗时的时候,可能生产消息的速度远大于消息的消费速度,长此以往,消息就会堆积越来越多,无法及时处理。此时可以使用work模型,多个消费者共同处理消息,消息处理的速度就能大大提高。
效果图:
image
由效果图可以看出,两个消费者监听到的数据是一样多的,也就是说消息是平均分配给每个消费者,并没有考虑到消费者的处理能力。导致1个消费者空闲,另一个消费者忙的不可开交。没有充分利用每一个消费者的能力,最终消息处理的耗时远远超过了1秒。这样显然是有问题的。
解决此问题也简单,就是在Consumer服务的application.yml文件中加入如下配置:

点击查看代码
spring:
  rabbitmq:
    listener:
      simple:
        prefetch: 1
简单的说就是能者多劳,这样充分利用了每一个消费者的处理能力,可以有效避免消息积压问题。 效果图:

image

3.Fanout交换机

Fanout模型图:
image

  • 可以有多个队列
  • 每个队列都要绑定到Exchange(交换机)
  • 生产者发送的消息,只能发送到交换机
  • 交换机把消息发送给绑定过的所有队列
  • 订阅队列的消费者都能拿到消息
    效果图:
    image
    本模式有点像是广播模式,群发消息。

4.Direct交换机

Direct模型图:
image

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
  • 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey。
  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息
    效果图:
    image

5.Topic交换机

Topic模型图:
image
Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。
只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!
通配符规则:
(#)匹配一个或多个词
(*)匹配不多不少恰好1个词
效果图:
image

posted @   瓜亭  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示