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

相关推荐
G_H_S_3_13 分钟前
【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
linux·运维·服务器·网络·ansible
爱敲代码的边芙1 小时前
实习两个月总结
服务器
岚天start1 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
HelloGitHub1 小时前
直击痛点的开源项目「GitHub 热点速览」
开源·github
wanhengidc6 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机
时序数据说7 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
元清加油10 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
DjangoJason12 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
向日葵.12 小时前
fastdds.ignore_local_endpoints 属性
服务器·网络·php
昵称为空C14 小时前
SpringBoot接口限流的常用方案
服务器·spring boot