RabbitMQ消息队列的工作模式

文章目录

    • 1.RabbitMQ常用的工作模式
    • 2.简单模式
    • 3.WorkQueues工作队列模式
    • 4.Pub/Sub发布订阅模式
    • 5.Routing路由模式
    • 6.Topics通配符模式

1.RabbitMQ常用的工作模式

官方文档地址:https://www.rabbitmq.com/getstarted.html

工作模式其实就是消息队列分发消息的路由方式。

RabbitMQ常用的几种工作模式:

  • 简单模式
  • WorkQueues工作队列模式
  • PubSub生产者/PubSub消费者模式
  • Routing路由模式
  • Topics通配符模式
    发布/订阅模式(Publish/Subscribe):该模式用于一对多的消息广播。生产者将消息发送到交换机(Exchange),而交换机将消息广播给所有绑定到它的队列(Queue)。每个队列都有自己的消费者。这种模式可以用于实现日志记录、即时通知等场景。

请求/应答模式(Request/Reply):在这种模式下,客户端发送一个请求消息到队列中,然后一个或多个消费者处理该请求并发送响应消息回复给客户端。这种模式常用于需要客户端与服务端之间进行双向通信的场景,例如RPC(远程过程调用)。

确认模式(Acknowledgements):RabbitMQ支持消息的确认机制。当消费者从队列中获取消息并成功处理后,会向RabbitMQ发送一个确认消息。这样可以确保消息被正确处理,避免消息丢失。

延迟队列模式(Delay Queues):延迟队列模式用于延迟处理消息。消息被发送到延迟队列,等待一段时间后再被转发到目标队列进行处理。这种模式可以用于实现定时任务、延迟通知等功能。

死信队列模式(Dead-Letter Queues):当消息无法被消费或被拒绝时,可以将其发送到死信队列。死信队列通常用于处理无法被处理的消息,以便进一步分析和处理。

2.简单模式

简单模式最容易理解,一个生产者一个消费者,生产者产生数据写入MQ消息队列,消费者从MQ中读取消息数据进行处理。

在这里插入图片描述

3.WorkQueues工作队列模式

WorkQueues工作队列模式由多个消费端组成,与简单模式相比,多了一个或者一组消费端,多个消费端共同消费同一个队列中的消息数据,但是多个消费端会抢着读取队列中的一条消息数据。

多个消费者消费数据的方式是轮询。

一个队列中如果存在多个消费者,那么消费者之间对于同一个消息的关系是竞争关系,只有一个消费端去处理这一条消息数据,争前恐后去抢一条数据进行处理,因此说是竞争关系。

应用场景:对于任务过重或者任务较多的情况下,工作队列模式可以提供任务的处理速度,因为是多个消费端同时处理消息数据,例如短发分发,只需要有一个消费端成功发送即可。

RabbitMQ消息队列的工作模式_第1张图片

4.Pub/Sub发布订阅模式

在前面的两种模式中,一个消费方只能处理一个消息数据,效率并不高,从而引来了Pub/Sub发布订阅模式,发布订阅模式中的多个消费者可以同时对一条消息数据进行处理。

如下图所示,在发布订阅模式中多了一个组件,这个组件就是Exchange交换组件,生产者发布数据到MQ消息队列,首先会进入到Exchange交换组件,由Exchange将消息数据路由分发到不同的队列中,然后消费者同时从不同的队列中消费数据。

Exchange可以看似将一条消息数据拆分成了多个内容,然后分别存放在不同的队列中,这样多个消费者就可以在不同的队列中同时消费数据。

RabbitMQ消息队列的工作模式_第2张图片

P:生产者,发送消息的程序,不会直接发送到消息队列,而是先发送给X(交换机)。

C:消费者,消息的接收者,一直等待消息数据的到来。

Queue:消息队列,接收消息、缓存消息、

Exchange:交换机,接收生产者发送的消息,将消息传递给某个特别队列、传递给所有队列、或者将消息丢弃,如何操作就要取决于Exchange的类型。

常见的Exchange交换机类型:

  • Fanout:广播,将消息交给所有绑定到交换机的队列。
  • Direct:定向,将消息交给符合routing key的队列。
  • Topic:通配符,将消息交给符合routing pattern路由模式的队列。

Exchange只负责转发消息,不具备存储消息的能力,如果没有队列与Exchange绑定,那么消息就会丢失。

5.Routing路由模式

Routing是Exchange中的一种类型,使用Routing路由模式,可以将不同级别的消息数据路由到特定的消息队列中,再由特定的消费者进行接收处理。

Routing的应用场景举例:将error级别的消息数据通过A消费者写入到数据,其他级别的消息数据通过B程序展示在控制台。

使用Routing路由模式时,Exchange与队列也不再进行绑定了,而是通过声明一个RoutingKey,通过这个key将消息路由到特定的队列中,因此在消息发送方发消息时,就需要指定消息的RoutingKey,Routing根据消息中的RoutingKey进行判断,当消息中的RoutingKey与队列中的RoutingKey完全一致时,消息才能正常存储到队列中,最后被消费者处理。
RabbitMQ消息队列的工作模式_第3张图片

6.Topics通配符模式

Topics模式是功能最强大的一个模式,具备上述所有模式的功能。

Topics是Exchange中的一种类型,当指定模式为Topic时,消息数据的路由就支持了通配符的形式,例如当消息发送方发送的数据中,RouteingKey包含orange的消息数据都被路由到Q1队列中,消息的RouteingKey包含rabbit的数据被路由到Q2队列中。当一个RouteingKey同时满足两个队列的条件时,会将消息同时分发到两个队列中。

简而言之,使用Topic模式后,可以对消息数据中的RoutingKey进行通配符匹配,将满足条件的消息数据分发到特定的队列中。

RabbitMQ消息队列的工作模式_第4张图片

你可能感兴趣的:(ActiveMQ,java-rabbitmq,rabbitmq,kafka)