消息队列RabbitMQ之五种消息模型

什么是RabbitMQ?可以参考我的上一篇博客:消息队列RabbitMQ之初学者

RabbitMQ的消息模型

在RabbitMQ的官方教程中,RabbitMQ为我们提供了6中消息模型,不过第6种是RPC(远程调用),不是MQ(消息队列),所以RabbitMQ真正的消息模型只有5种。

在这里插入图片描述

RabbitMQ消息模型——基本消息模型

在这里插入图片描述

  • P(producer/ publisher):生产者,一个发送消息的用户应用程序。
  • C(consumer):消费者,消费和接收有类似的意思,消费者是一个主要用来等待接收消息的用户应用程序
  • 队列(红色区域):rabbitmq内部类似于邮箱的一个概念。虽然消息流经rabbitmq和你的应用程序,但是它们只能存储在队列中。队列只受主机的内存和磁盘限制,实质上是一个大的消息缓冲区。许多生产者可以发送消息到一个队列,许多消费者可以尝试从一个队列接收数据。
  • 生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区。

RabbitMQ消息模型——work队列消息模型

在这里插入图片描述

  • work队列模型是为了弥补基本消息模型的缺陷而诞生的,是通过一个队列绑定多个消费者,以达到避免消息在队列中堆积的情况。

RabbitMQ消息模型——订阅模型Fanout

在这里插入图片描述

  • RabbitMQ的第三、四、五种消息模型其实都是订阅模型,分别是订阅模型的三种不同的类型。
  • 订阅模型比基本消息模型和work队列消息模型,多出了一个交换机,每个队列都要绑定交换机。
  • 生产者不再直接将消息发送到队列中,而是发送到交换机中,然后由交换机根据不同的策略,发送到不同的队列中。订阅模型的三种不同类型,其实就是采用了不同的交换机分发策略。
  • Fanout(扇出)模型,交换机直接将所有消息以广播的形式,发送给所有队列。即生产者生产的一条消息,会被交换机发给所有的队列,所有和队列绑定的消费者均会消费这一条消息。

RabbitMQ消息模型——订阅模型Direct

在这里插入图片描述

  • Direct(选择性发送),交换机不会将消息发送给所有队列,而是通过队列绑定到交换机上的RoutingKey(路由Key)发送到指定的队列中。
  • 生产者在生产消息的时候,需要指定RoutingKey,这样交换机才知道该将该条消息发送给指定队列。

RabbitMQ消息模型——订阅模型Topic

在这里插入图片描述

  • Topic(模糊选择发送),Topic模型和Direct模型基本类似,不过Topic模型的交换机可以让队列在绑定的时候,使用通配符的方式进行模糊匹配。
  • *表示正好匹配一个单词,#表示匹配一个或多个单词。
发布了64 篇原创文章 · 获赞 67 · 访问量 6863

猜你喜欢

转载自blog.csdn.net/qq_45193304/article/details/105051543