【RabbitMQ】工作模式介绍

目录

  • 一、Simple(简单模式)
  • 二、Work Queue (工作队列模式)
  • 三、Publish/Subscribe(发布订阅模式)
    • 3.1 交换机
    • 3.2 发布订阅模式
  • 四、Routing(路由模式)
  • 五、Topics (通配符模式)
  • 六、RPC(RPC通信)
  • 七、Publisher Confirms(发布确认)

【RabbitMQ】工作模式介绍

RabbitMQ主要由以下七种工作模式

【RabbitMQ】工作模式介绍

一、Simple(简单模式)

【RabbitMQ】工作模式介绍

  • P: producer ⽣产者,也就是要发送消息的程序
  • C: consumer 消费者,消息的接收者
  • Queue: 消息队列,
  • 图中⻩⾊背景部分,类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从其中取出消息。

简单模式特点:就⼀个⽣产者P,⼀个消费者C,消息只能被消费⼀次。也称为点对点(Point-to-Point)模式。

适⽤场景:消息只能被单个消费者处理。

二、Work Queue (工作队列模式)

【RabbitMQ】工作模式介绍

在简单模式上,引入多个消费者,在多个消息情况下,工作队列会将消息分派给不同的消费者,每个消费者都会接收到不同的消息。

工作队列模式特点:消息不会重复消费,消息会分配给不同的消费者。

适⽤场景:集群环境中做异步处理。

三、Publish/Subscribe(发布订阅模式)

【RabbitMQ】工作模式介绍

  • X :交换机

在工作队列模式上,引入交换机Exchange,而且是fanout类型的交换机。

3.1 交换机

交换机的作⽤:⽣产者将消息发送到Exchange,由交换机将消息按⼀定规则路由到⼀个或多个队列中(再RabbitMQ中⽣产者直接将消息投递到队列中,实际上不会发生,也就是简单模式和工作队列模式也会经过一层交换机,但是交换机与不存在作用类似)。

RabbitMQ交换机有四种类型: fanout、direct、 topic、headers,不同类型有着不同的路由策略。

  1. Fanout(扇出交换机):⼴播,将消息交给所有绑定到交换机的队列 ( Publish / Subscribe 模式)
  2. Direct(直连交换机):定向,把消息交给符合指定 routing key 的队列 ( Routing 模式)
  3. Topic(主题交换机):通配符,把消息交给符合 routing pattern ( 路由模式 )的队列 (Topics模式)
  4. headers(头交换机):类型的交换器不依赖于路由键的匹配规则来路由消息,⽽是根据发送的消息内容中的headers属性进⾏匹配。headers类型的交换器性能会很差,⽽且也不实⽤,基本上不会看到它的存在。

AMQP协议⾥还有另外两种类型:

  1. System(系统交换机):用于将消息路由到系统服务,通常以 amq. 开头保留给协议内部使用。
  2. Implementation-defined(实现自定义交换机):由具体 AMQP 实现(如 RabbitMQ)扩展定义,类型名必须以 x- 开头。

Exchange(交换机):只负责转发消息,不具备存储消息的能⼒,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息就会丢失。

RoutingKey:路由键。⽣产者将消息发给交换器时,指定的⼀个字符串,⽤来告诉交换机应该如何处理这个消息。

Binding Key:绑定。RabbitMQ中通过 Binding (绑定) 将交换器与队列关联起来,在绑定的时候⼀般会指定⼀个Binding Key,这样RabbitMQ就知道如何正确地将消息路由到队列了。Binding Key 也是 RoutingKey 的一种。

【RabbitMQ】工作模式介绍

3.2 发布订阅模式

Publish/Subscribe模式:

【RabbitMQ】工作模式介绍

⼀个⽣产者P,多个消费者C1,C2,X代表交换机消息复制多份,每个消费者接收相同的消息,⽣产者发送⼀条消息,经过交换机转发到多个不同的队列,多个不同的队列就有多个不同的消费者。

适合场景:消息需要被多个消费者同时接收的场景。如:实时通知或者⼴播消息。

四、Routing(路由模式)

【RabbitMQ】工作模式介绍

在发布订阅模式基础上,增加routing key (路由key)

发布订阅模式是⽆条件的将所有消息分发给所有消费者,路由模式是Exchange根据RoutingKey的规则,将数据筛选后发给对应的消费者队列。

适合场景:需要根据特定规则分发消息的场景。如系统打印⽇志,日志分发给不同级别的队列。

五、Topics (通配符模式)

【RabbitMQ】工作模式介绍

在routingKey的基础上,增加了通配符的功能,使之更加灵活。

Topics和Routing的基本原理相同,即:⽣产者将消息发给交换机,交换机根据RoutingKey将消息转发给与RoutingKey匹配的队列。类似于正则表达式的⽅式来定义Routingkey的模式。

不同之处是:routingKey的匹配⽅式不同,Routing模式是相等匹配,topics模式是通配符匹配。

适合场景:需要灵活匹配和过滤消息的场景。

六、RPC(RPC通信)

【RabbitMQ】工作模式介绍

在RPC通信的过程中,没有⽣产者和消费者,⽐较像RPC远程调⽤,⼤概就是通过两个队列实现了⼀个可回调的过程。

像调用本地函数一样调用远程服务的通信范式。它屏蔽了网络、序列化、反序化、错误处理等细节,让分布式系统的开发像写单机程序一样简单。就像"打电话",而消息队列是“发邮件”

七、Publisher Confirms(发布确认)

【RabbitMQ】工作模式介绍

Publisher Confirms模式是RabbitMQ提供的⼀种确保消息可靠发送到RabbitMQ服务器的机制。在这种模式下,⽣产者可以等待RabbitMQ服务器的确认,以确保消息已经被服务器接收并处理。

  1. ⽣产者将Channel设置为confirm模式 (通过调⽤ channel.confirmSelect() 完成) 后,发布的每⼀条消息都会获得⼀个唯⼀的ID,⽣产者可以将这些序列号与消息关联起来,以便跟踪消息的状态。
  2. 当消息被RabbitMQ服务器接收并处理后,服务器会异步地向⽣产者发送⼀个确认(ACK)给⽣产者(包含消息的唯⼀ID),表明消息已经送达。通过Publisher Confirms模式,⽣产者可以确保消息被RabbitMQ服务器成功接收,从⽽避免消息丢失的问题。

适⽤场景:对数据安全性要求较⾼的场景。⽐如⾦融交易,订单处理。

© 版权声明

相关文章