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 的七种工作模式,后续会介绍这些工作模式的具体代码实现。感谢阅览!!

相关推荐
九河云1 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock2 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零2 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
热爱跑步的恒川3 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
P.H. Infinity4 小时前
【RabbitMQ】03-交换机
分布式·rabbitmq
ClkLog-开源埋点用户分析6 小时前
ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
华为·开源·开源软件·harmonyos
幺零九零零7 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
free8 小时前
netstat中sendq/recvq用于排查发送端发送数据的问题
服务器
力姆泰克8 小时前
看电动缸是如何提高农机的自动化水平
大数据·运维·服务器·数据库·人工智能·自动化·1024程序员节