当前位置: 首页 > news >正文

Rabbitmq中常见7种模式介绍

  1. p:生成者,生成消息的程序
  2. c:消费者,消费消息的程序
  3. Queue:消息队列,用于缓存消息,生产者向里面投递消息,消费者从里面拿取消息消费
  4. X:交换机,在rabbitMQ中,实际上是把生成者的消息先发送到交换机上面,然后在按照一定的规则路由到一个或者多个队列中,相关概念:[[交换机类型]]

simple(简单模式)

在这里插入图片描述

  1. 一个生产者,一个消费者
  2. 适用场景:消息只能被单个消费者处理

此处省略了exchange交换机,在rabbitmq中是一定有交换机的,其他的可能没有

Work Queue(工作队列)

在这里插入图片描述

  1. 一个生产者,多个消费者
  2. 多消息的情况下,Work Queue 会将消息分派给不同的消费者,每个消费者都会接收到不同的消息
  3. 特点:消息不会重复,分配给不同的消费者
  4. 使用场景:在集群环境中做异步处理

此处省略了exchange交换机,在rabbitmq中是一定有交换机的,其他的可能没有

比如在12306短信通知服务,订票成功后,订单消息会发送到RabbitMQ,短信服务从RabbitMQ中获取订单消息,并且发送消息
在这里插入图片描述

Publish/Subscribe(发布/订阅)

在这里插入图片描述

  1. 一个生产者,多个消费者
  2. X代表交换机消息复制多份,每个消费者接收相同的消息
  3. 生产者发送一条消息,经过交换机转发到不同的队列,多个不同队列就有多个不同的消费者(无条件)
  4. 适合场景:消息需要被多个消费者同时接收的场景,如实时通知或者广播消息

Routing(路由模式)

在这里插入图片描述

  1. 路由模式是发布订阅模式的变种,在其基础上添加了RoutingKey
  2. 相比于前者的无条件分发消息,路由模式根据Exchange的RoutingKey的规则将数据筛选后发送给对应的消费者队列
  3. 使用场景:需要特定规则分发消息的场景

Topic(通配符模式)

在这里插入图片描述

  1. 在routingKey的基础上,增添[[交换机类型#^8c5d09|通配符]]的功能,使得匹配规则更加灵活
  2. 交换机通过RoutingKey将消息转发给RoutingKey匹配的队列
  3. 适用场景:需要灵活匹配和过滤消息的场景

[!QUESTION] Routing和Topic有什么不同?
不同之处:routingKey的匹配方式不同。Routing模式是相等匹配,topics模式是通配符匹配

RPC(Remote Procedure Call)

在这里插入图片描述

  1. 当客户端启动时,它会创建一个独占的回调队列。
  2. 对于 RPC 请求,客户端发送一个包含两个属性的消息: reply_to,该属性设置为回调队列,以及 correlation_id,该属性为每个请求设置一个唯一值。
  3. 请求被发送到一个 rpc_queue 队列。
  4. RPC 工作进程(又名:服务器)正在该队列上等待请求。当请求出现时,它会执行任务,并使用来自 replyTo 字段的队列将结果消息发送回客户端。
  5. 客户端在应答队列上等待数据。当消息出现时,它会检查 correlationId 属性。如果它与请求中的值匹配,则将响应返回给应用程序。

Publisher Confirms(发布确认模式)

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

  1. 生产者将Channel设置为confirm模式(通过调用channel.confirmSelect()完成)后,发布的每一条消息都会获得一个唯一的ID,生产者可以将这些序列号与消息关联起来,以便跟踪消息的状态。
  2. 当消息被RabbitMQ服务器接收并处理后,服务器会异步地向生产者发送一个确认(ACK)给生产者(包含消息的唯一ID),表明消息已经送达。
  3. 通过Publisher Confirms模式,生产者可以确保消息被RabbitMQ服务器成功接收,从而避免消息丢失的问题。
  4. 适用场景:对数据安全性要求较高的场景。比如金融交易,订单处理。
http://www.dtcms.com/a/306405.html

相关文章:

  • QString 内存机制详解
  • 【Excel】制作双重饼图
  • 恢复IP地址
  • 明远智睿V2H核心模组:工业4.0时代的“性价比革命”
  • 双塔模型 + 自监督学习:解决长尾物品表征难题
  • IBus vs. Fcitx5:一场 Linux 输入法框架的正面交锋
  • Maximum Subarray Sum
  • Redis高可用性
  • CSM7020L 磷酸铁锂电池充电管理的太阳能草坪灯 LED 驱动芯片 SOT23-6封装 带多种反接功能
  • LLM之RAG理论(十八)| ChatGPT DeepResearch 深度研究功能全面技术分析报告
  • 使用Docker 在Rocky Linux 9.5上在线安装Dify
  • 2025年DDoS攻防战:六层防护体系构建业务“数字免疫”
  • 从0开始学linux韦东山教程Linux驱动入门实验班(7)
  • 伦敦招聘数据管道系统设计与实现
  • android-PMS-常见定制场景
  • 【文章浏览 I】
  • 【7】串口编程三种模式(查询/中断/DMA)韦东山老师学习笔记(课程听不懂的话试着来看看我的学习笔记吧)
  • luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形
  • S3、SFTP、FTP、FTPS 协议的概念、对比与应用场景
  • vulhub ica1靶场攻略
  • AI框架工具FastRTC快速上手2——整体框架及Stream类详解
  • 浏览器pdf、image显示
  • MaxKB+MinerU:通过API实现PDF文档解析并存储至知识库
  • 虚幻基础:旋转体
  • 在java开发中,错误信息类中定义一个errMap,为什么要在static{}中,put键值对?这是为什么?好处是什么?
  • 嵌入式 C 语言入门:分支结构(if/switch)的用法与硬件控制实践
  • [ java IO ] 文件传输中的输入输出(流)
  • 算法能力提升之快速矩阵
  • PSO-TCN-BiLSTM-MATT粒子群优化算法优化时间卷积神经网络-双向长短期记忆神经网络融合多头注意力机制多特征分类预测/故障诊断Matlab实现
  • 电动车充电桩能耗实时监测解决方案