RabbitMQ 7种工作模式详解及应用场景

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

⭐ RabbitMQ ⭐

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇


RabbitMQ 7种工作模式

RabbitMQ 是一个广泛使用的开源消息代理和队列服务器,支持多种消息传递模式。以下是RabbitMQ提供的7种主要的工作模式及其应用场景的详细介绍。


1. Simple(简单模式)

角色

  • P (Producer): 生产者,负责发送消息。
  • C (Consumer): 消费者,负责接收消息。
  • Queue (消息队列): 类似于邮箱,可以缓存消息;生产者向其中投递消息,消费者从中取出消息。

特点:一个生产者,一个消费者,消息只能被消费一次。也称为点对点 (Point-to-Point) 模式。

适用场景:消息只能被单个消费者处理的情况。


2. Work Queue(工作队列)

角色

  • P (Producer): 生产者。
  • C1, C2 (Consumers): 多个消费者。
  • Queue (消息队列): 用于缓存消息。

特点:一个生产者,多个消费者。在多个消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息。

适用场景:集群环境中做异步处理。例如,12306 短信通知服务,订单成功后,订单消息会被发送到 RabbitMQ,短信服务从 RabbitMQ 中获取订单信息,并发送通知信息。


3. Publish/Subscribe(发布/订阅)

角色

特点:生产者将消息发送到 Ex

  • P (Producer): 生产者。
  • X (Exchange, 交换机): 负责将消息按一定规则路由到一个或多个队列。
  • C1, C2 (Consumers): 多个消费者。
  • Queue (消息队列): 用于缓存消息。
    概念介绍
    Exchange: 交换机 (X).

作⽤: ⽣产者将消息发送到Exchange, 由交换机将消息按⼀定规则路由到⼀个或多个队列中(上图中⽣产 者将消息投递到队列中, 实际上这个在RabbitMQ中不会发⽣. )
RabbitMQ交换机有四种类型: fanout,direct, topic, headers, 不同类型有着不同的路由策略.
AMQP协 议⾥还有另外两种类型, System和⾃定义, 此处不再描述.

  1. Fanout:⼴播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式)
  2. Direct:定向,把消息交给符合指定routing key的队列(Routing模式)
  3. Topic:通配符,把消息交给符合routing pattern(路由模式)的队列(Topics模式)
  4. headers类型的交换器不依赖于路由键的匹配规则来路由消息, ⽽是根据发送的消息内容中的

headers属性进⾏匹配. headers类型的交换器性能会很差,⽽且也不实⽤,基本上不会看到它的存在.
Exchange(交换机)只负责转发消息, 不具备存储消息的能⼒, 因此如果没有任何队 Exchange绑定,或者没有符合路由规则的队列,那么消息就会丢失
RoutingKey: 路由键.⽣产者将消息发给交换器时, 指定的⼀个字符串, ⽤来告诉交换机应该如何处理这个消息.
Binding Key:绑定. RabbitMQ中通过Binding(绑定)将交换器与队列关联起来, 在绑定的时候⼀般会指 定⼀个Binding Key, 这样RabbitMQ就知道如何正确地将消息路由到队列了.

change,由交换机将消息广播到所有绑定的队列。每个消费者都会接收到相同的消息。
⽐如下图: 如果在发送消息时, 设置了RoutingKey 为orange, 消息就会路由到Q1

当消息的Routing key与队列绑定的Bindingkey相匹配时,消息才会被路由到这个队列.
BindingKey其实也属于路由键中的⼀种, 官⽅解释为:the routingkey to use for the binding.
可以翻译为:在绑定的时候使⽤的路由键. ⼤多数时候,包括官⽅⽂档和RabbitMQJava API 中都把
BindingKey和RoutingKey看作RoutingKey, 为了避免混淆,可以这么理解:

  1. 在使⽤绑定的时候,需要的路由键是BindingKey.
  2. 在发送消息的时候,需要的路由键是RoutingKey

适用场景:消息需要被多个消费者同时接收的场景。例如,中国气象局发布天气预报的消息,新浪、百度、搜狐等门户网站通过队列绑定到该交换机,自动获取气象局推送的气象数据。


4. Routing(路由模式)

角色

  • P (Producer): 生产者。
  • X (Exchange, 交换机): 根据 RoutingKey 的规则将消息路由到对应的队列。
  • C1, C2 (Consumers): 多个消费者。
  • Queue (消息队列): 用于缓存消息。

特点:交换机根据 RoutingKey 将消息筛选后发给对应的消费者队列。

适用场景:需要根据特定规则分发消息的场景。例如,系统打印日志,日志等级分为 error, warning, info, debug,可以通过这种模式将不同的日志发送到不同的队列,最终输出到不同的文件。


5. Topics(通配符模式)

角色

  • P (Producer): 生产者。
  • X (Exchange, 交换机): 根据 RoutingKey 的通配符匹配规则将消息路由到对应的队列。
  • C1, C2 (Consumers): 多个消费者。
  • Queue (消息队列): 用于缓存消息。

特点:类似于 Routing 模式,但使用通配符来定义 RoutingKey 的模式,使得匹配更加灵活。

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

示例图:展示交换机根据通配符匹配规则将消息路由到不同的队列。


6. RPC (Remote Procedure Call, 远程过程调用)

角色

  • 客户端 (Client): 发送请求消息并等待响应。
  • 服务端 (Server): 接收请求消息并发送响应消息。

特点:客户端发送消息到指定的队列,并设置 replyTo 字段指定回调队列。服务端处理请求并发送响应消息到回调队列。客户端在回调队列上等待响应消息,并检查 correlationId 属性以确保它是所期望的响应。

适用场景:需要实现远程调用的过程,例如微服务间的通信。


7. Publisher Confirms(发布确认)

角色

  • P (Producer): 生产者。
  • RabbitMQ Server: 消息服务器.

特点:生产者将 Channel 设置为 confirm 模式,发布的每一条消息都会获得一个唯一的 ID。当消息被 RabbitMQ 服务器接收并处理后,服务器会异步地向生产者发送一个确认 (ACK),表明消息已经送达。

适用场景:对数据安全性要求较高的场景,例如金融交易、订单处理。

以上就是RabbitMQ 的七种工作模式,后续会介绍这些工作模式的具体代码实现。感谢阅览!!

相关推荐
开源社9 分钟前
一场开源视角的AI会议即将在南京举办
人工智能·开源
FreeIPCC10 分钟前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
海害嗨11 分钟前
阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!
学习·开源
生命是有光的15 分钟前
【开源风云】从若依系列脚手架汲取编程之道(八)
开源
1900431 小时前
linux复习5:C prog
linux·运维·服务器
HuggingFace2 小时前
Halo 正式开源: 使用可穿戴设备进行开源健康追踪
开源·健康追踪
李迟3 小时前
某Linux发行版本无法使用nodejs程序重命名文件问题的研究
java·linux·服务器
酷酷学!!!3 小时前
Linux基础指令(汇总)
linux·运维·服务器
SchneeDuan3 小时前
建造者模式
运维·服务器·建造者模式
麻花20134 小时前
WPF里面的C1FlexGrid表格控件添加RadioButton单选
java·服务器·前端