RabbitMQ框架及应用场景

news/2025/10/24 17:07:43/文章来源:https://www.cnblogs.com/18sui/p/19163819

简介

RabbitMQ是一个使用Erlang,基于AMQP协议的MQ组件。

AMQP全称为 Advanced Message Queuing Protocol高级消息队列协议****),是一个面向消息的中间件传输协议,用于在应用程序之间进行异步消息通信。

AMQP协议定义了多种角色和服务,包括生产者、消费者、交换器、队列等。其中生产者负责生成消息,消费者负责接收和处理消息,交换器则负责将消息路由到队列中。

AMQP协议的消息传输基于消息队列,支持消息的确认、持久化、事务等功能,同时支持不同的消息传输模式,如点对点(point-to-point)和发布-订阅(publish-subscribe)模式。

整体架构

  • Virtual host: 虚拟主机,可以进行数据隔离

  • Publisher: 消息发送者

  • Consumer:消息消费者

  • queue:队列,存放未消费的消息

  • exchange:交换机,路由消息,将消息发送到相应的队列

暂时无法在飞书文档外展示此内容

交换机的四种类型

交换机有四种类型,分别是:Direct、Fanout、Topic和Headers

  • direct: 直接匹配模式,将消息发送到与路由键完全匹配的队列中。按照消息的路由键(routing key)完全匹配来投递消息。direct模式可以使用RabbitMQ自带的默认交换机,所以不需要将交换机进行任何绑定操作

  • topic: 使用通配符进行模糊匹配,消息会带有一个路由键(routing key),而队列绑定到交换机上时,也可以指定主题,而且还能使用一定的正则形式,只要主题匹配上消息的路由键,该消息就会发送至该队列 符号“#”匹配一个或多个词 eg:" log.# "能够匹配到‘ log.info.oa ’ 符号“*” 匹配不多不少一个词 eg:“ log.* ”只能匹配到“log.erro”

  • headers: 根据消息头的键值对匹配,按照消息头(header)匹配来投递消息。当消息头与某个绑定的headers完全匹配时,才会将消息发送到该队列中。

  • fanout : 将接收到的所有消息广播到它知道的所有队列中,如果routing_key 有指定也不会生效

生产者可靠性

  • 生产者重连

  • 生产者确认

MQ可靠性

  • MQ数据持久化,queue durable,消息会写入磁盘进行持久化

  • 惰性队列 lazy queue,惰性队列会将接收到的消息直接存入文件系统

消费者可靠性

  • 消费者确认

  • 失败重试

  • 业务幂等性,先查后改存在并发问题,可以使用sql语句根据条件update实现幂等性

死信交换机

消息被拒绝,并且设置不能重发;或者消息过期还无人消费;或者队列满了,早期的消息;就会成为死信。

如果队列 通过dead-letter-exchange 属性指定了一个交换机,那么该队列中的死信就会投递到这个交换机中,

这个交换机就被称为死信交换机(Dead Letter Exchange,简称DLX)

应用场景

死信交换机

在订单取消方面可以发挥作用。以下是一个使用死信交换机实现订单取消的示例:

定义一个延迟队列,如果这个包含死信的队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchange,检查DLX)。

如果这个死信交换机也绑定了一个队列,则消息最终会进入这个存放死信的队列。然后消费者监听死信队列,取消订单。

另外,队列将死信投递给死信交换机时,必须知道两个信息:

  • 死信交换机名称

  • 死信交换机与死信队列绑定的RoutingKey

这样才能确保投递的消息能到达死信交换机,并且正确的路由到死信队列。

  1. 配置****消息队列

    1. 开启手动ack,以便消费者在处理消息后可以进行应答。

    2. 定义一个延迟队列,例如order.delay.queue,用于存放超时的订单信息。

    3. 创建一个死信交换机,例如order.delay.exchange,用于接收来自延迟队列的消息。

    4. 配置延迟队列与死信交换机之间的绑定,使用x-dead-letter-exchangex-dead-letter-routing-key参数来指定死信消息的转发规则。

  2. 生产者

    1. 在订单生成后,将订单信息发送到延迟队列,并设置消息的TTL(生存时间),例如10分钟。

    2. 如果需要,可以设置消息的优先级,以便于区分不同紧急程度的订单。

  3. 消费者

    1. 监听死信队列,并从中获取超时的订单信息。

    2. 对订单信息进行处理,例如取消订单、更新订单状态等。

    3. 手动ack消息,告知消息服务器消息已被处理。

  4. 测试

    1. 发送延迟消息进行测试,并检查订单状态的变化。

这样就可以实现一个简单的基于死信交换机的订单取消系统。当订单超时时,消息会被转发到死信交换机,消费者可以从中获取并处理这些消息,从而实现订单的取消。这种方式相较于传统的定时扫表方式,更加高效和灵活

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/945500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南

UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例 - 指南2025-10-24 16:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: …

熟知大模型中mcp概念 --by zk

MCP核心概念解析 什么是MCP:让大模型拥有“手和脚” 大模型本身只有对话和决策能力,没有执行调用工具,获取资源的能力。因此定义一套让大模型调用外部能力的通用协议很重要。MCP(Model Context Protocol)是一套让…

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案

【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

2025年一体化雨水提升泵站厂家权威推荐榜单:污水提升泵站/一体化污水泵站/一体化雨水泵站源头厂家精选

在市政排水与水资源管理领域,一体化雨水提升泵站已成为现代城市基础设施的核心组成部分,其高效性能直接关系到城市防洪排涝能力与水环境保护质量。 随着全球城市化进程加速,市政排水系统面临前所未有的压力。据最新…

STM32软件I2C读写AT24C64 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

bcc

bcc原理从内核中获取数据。 整个工具的核心原理是利用 eBPF 技术,在内核中与块设备 I/O 相关的关键函数上设置探针(Tracepoint),从而在几乎无开销的情况下捕获 I/O 请求的开始和结束时间,计算出延迟,并将结果存入…

手写ibatis

通用 Mapper:提供通用的 CRUD 方法。条件构造器:支持链式调用,构建查询条件。分页查询:支持 Oracle 的分页查询。连表查询:支持 JOIN 查询。指定字段查询:支持动态选择查询字段。注解支持:通过注解配置实体类和…

读书笔记:解锁数据库查询新姿势:函数索引让你的搜索又快又准

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

国产IPD项目管理软件推荐|别再靠 Excel 推 IPD 了!帮你把IPD流程从“纸上”搬进系统

本文盘点了国内能真正支撑 IPD 流程落地的几款软件,从配置灵活、可视化程度高的飞书项目,到深度面向研发的禅道,覆盖制造业、硬件、互联网等多场景。看完你就能判断:哪一款最适合你的组织,帮你实现从立项到评审、…

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制

【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制第7篇:ParameterHandler参数处理机制 1. 学习目标确认 1.0 第6篇思考题解答 在深入学习ParameterHandler参数处理机制之前,让我们先回顾并解…

[linux] 文件夹可写权限的关闭和打开

设置仅可读:chmod -R a-w <folder_path>打开写权限:chmod -R 766 <folder_path>

2025年教室护眼灯厂家权威推荐榜单:led教室灯/幼儿园教室灯/教室照明灯具源头厂家精选

随着社会对青少年视觉健康的日益关注,教室照明环境已成为学校建设的重点环节。专业的教室护眼灯不仅能有效降低学生近视发生率,还能提升学习效率。本文将基于行业调研与公开数据,对当前市场上具有代表性的教室护眼灯…

2025年自动定量灌装机厂家权威推荐榜单:称重灌装机/膏状灌装机/瓶灌装机源头厂家精选

在当今工业化进程中,自动定量灌装设备作为生产线核心环节,其技术水平直接影响企业生产效益与产品质量。随着智能制造的深入推进,灌装设备行业正经历着从机械化向数字化、智能化的重要转型。本文将基于行业数据与技术…

厨房电子秤芯片方案:SIC8833

本文介绍了采用SIC8833QFN32单片机开发的一款5KG量程,0.1g精度的厨房电子秤。该秤具备自动调零、2段自动标定功能,支持USB充电,并能进行模式和单位转换。用户可通过MODE和UNIT键在重量、水体积、牛奶体积模式以及公…

备份恢复:backup database format plus archivelog归档备份集路径与数据库format指定不一致

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。备份恢复:b…

在MCUXpresso IDE中建立使用静态库的工程 - 指南

在MCUXpresso IDE中建立使用静态库的工程 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南

本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。作者:杨兰馨(楠瑆) 背…

2025年江苏博士后微服务公司权威推荐榜单:博士后服务团/高层次人才服务/高层次人才引进源头公司精选

汇聚顶尖人才资源,构建创新驱动发展新引擎 在创新驱动发展的时代背景下,江苏省作为科技与人才高地,对博士后等高层次人才的需求日益增长。博士后微服务机构作为连接政府、企业、高校和人才的桥梁,已成为推动区域科…

RFSOC学习记录(六)混频模式分析

RFSOC学习记录(六),简要介绍混频模式以及利用xilinx官方频率规划器介绍混频​ 混频 混频器(Mixer)是RFSOC通过ip核实现在数字域的频率搬移,主要功能是在不改变采样率的情况下,把信号的频谱中心移动到目标频率附…

每周读书与学习-JMeter主要元件详细介绍(二)函数助手

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 1、函数助手 函数助手是…