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模型的交换机可以让队列在绑定的时候,使用通配符的方式进行模糊匹配。
*
表示正好匹配一个单词,#
表示匹配一个或多个单词。