RabbitMQ 消息队列【第25讲:消息可靠性投递(上)】

RabbitMQ

本文介绍了 RabbitMQ 消息传递过程中可能丢失的四个环节及解决方案:1. Producer 到 Exchange 环节通过 Publisher Confirm 机制确保消息送达;2. Exchange 到Queue 环节通过 Return 机制处理路由失败;3. Queue 存储环节通过队列和消息持久化防止重启丢失;4. Consumer 处理环节通过手动 ACK 保证消费完成。完整可靠性方案会带来性能开销,建议根据业务重要性选择配置级别,如订单支付类关键业务需开启所有保障机制,而日志收集等场景可使用默认配置。

辰风沐阳 阅读 52 2026-07-12

RabbitMQ 消息队列【第24讲:延迟队列实现方案】

RabbitMQ

本文介绍了延迟队列的三种实现方案及其适用场景。延迟队列用于管理未来某个时间点执行的任务,如订单超时取消、会议提醒等。经典方案是 RabbitMQ 的TTL+DLX 组合,适合固定时长的延迟需求;RabbitMQ 官方延迟插件更灵活但需额外安装;Redis 方案则适合已有 Redis 的项目,但需自行实现定时任务。作者建议根据项目现状选择最简单可行的方案,多数情况下 TTL+DLX 已能满足需求,避免为简单需求引入复杂方案。

辰风沐阳 阅读 57 2026-07-11

RabbitMQ 消息队列【第23讲:死信队列 DLX】

RabbitMQ

本文介绍了 RabbitMQ 死信队列(DLX)的实现与应用。主要内容包括: 死信概念:消息过期、消费者拒收或队列满时,消息会变成死信,需通过死信队列处理。 DLX 机制:死信队列是一个普通 Exchange,用于接收死信并路由到指定队列,无需额外代码。 实现步骤: 声明死信 Exchange 和队列(如dlx_exchange和timeout_queue)。 业务队列绑定 DLX 参数(x-dead-letter-exchange和路由键)。 消息过期后自动转发至死信队列,触发取消订单等逻辑。

辰风沐阳 阅读 69 2026-07-10

RabbitMQ 消息队列【第22讲:消息过期 TTL】

RabbitMQ

本文介绍了如何利用消息队列实现电商订单30分钟未支付自动取消的功能。传统定时任务扫表方案存在延迟、资源浪费和数据库压力问题,而基于 RabbitMQ 的 TTL(Time To Live)机制可以更高效地实现这一需求。TTL 允许为消息设置过期时间,超过时间未消费的消息将被丢弃或转入死信队列。文章详细说明了两种 TTL 设置方式(单条消息设置和队列级别设置),并给出了代码示例。同时指出单纯 TTL 的局限性,为后续介绍死信队列(DLX)解决方案做了铺垫。

辰风沐阳 阅读 63 2026-07-09

RabbitMQ 消息队列【第21讲:日志分级系统实战】

RabbitMQ

本文介绍了如何利用 RabbitMQ 的 Topic Exchange 实现日志分级处理系统。系统将日志分为 info、warning、error 三个级别,分别对应不同的处理方式:存储分析、监控统计和实时告警。通过模块.级别的路由规则(如order.error),配合通配符绑定(.error、.warning、*.info和#),实现日志的精准分流到不同队列。文章提供了 PHP 代码示例展示 Exchange 声明、队列绑定、消息发布和消费逻辑,并验证了不同级别日志能正确路由到对应队列。

辰风沐阳 阅读 72 2026-07-08

RabbitMQ 消息队列【第20讲:Headers Exchange 头匹配】

RabbitMQ

本文介绍了 RabbitMQ 中的 Headers Exchange,它通过消息头属性(headers)而非路由键(routing key)进行消息路由,支持多维度键值对匹配,提供 all(全匹配)和 any(任一匹配)两种模式。相比 Topic Exchange,Headers Exchange 灵活性更高但性能较差,实际使用频率较低,仅适用于消息维度复杂、需多属性组合匹配的场景。文中对比了四种 Exchange 类型:Direct(精确匹配)、Fanout(广播)、Topic(通配符匹配)和 Headers(属性匹配)

辰风沐阳 阅读 51 2026-07-07

RabbitMQ 消息队列【第19讲:Topic Exchange 通配符路由】

RabbitMQ

本文介绍了 RabbitMQ 的 Topic Exchange 模式。该模式通过通配符匹配规则实现灵活的消息路由,解决了 Direct Exchange 精确匹配和 Fanout Exchange 全量广播的局限性。 核心要点: 通配符规则: *匹配一个词(如*.error匹配order.error) #匹配多个词(如order.#匹配order.error/order.info等) 典型应用场景: 日志分级收集系统 按模块/类型批量分发消息 需要灵活路由规则的业务场景

辰风沐阳 阅读 64 2026-07-06

RabbitMQ 消息队列【第18讲:Fanout Exchange 广播模式】

RabbitMQ

本文介绍了 RabbitMQ 的 Fanout Exchange 模式,适用于需要广播消息的场景。与 Direct Exchange 的精确投递不同,Fanout Exchange 会将消息无条件转发给所有绑定的队列,无需指定路由键。典型应用如用户注册后同时触发邮件、优惠券发放和数据分析等操作。文章通过 PHP 代码演示了 Fanout Exchange 的声明、队列绑定和消息发布流程,并对比了 Fanout 和 Direct 两种模式的特点:Fanout 实现"一发多收"的广播机制,而 Direct 则是"精确投递"。

辰风沐阳 阅读 74 2026-07-05

RabbitMQ 消息队列【第17讲:Direct Exchange 精确匹配】

RabbitMQ

本文介绍了 RabbitMQ 中 Direct Exchange(直连交换机)的使用场景和实现方式。Direct Exchange 通过精确匹配路由标识实现消息的精准投递,适用于需要严格区分消息类型的场景,如日志分级处理系统。文章通过 PHP 代码示例展示了如何声明 Direct Exchange、绑定队列(error_queue、warning_queue、info_queue)并指定路由键(error/warning/info),实现不同级别日志的定向分发。

辰风沐阳 阅读 76 2026-07-04

RabbitMQ 消息队列【第16讲:Exchange 到底是什么】

RabbitMQ

本文围绕 RabbitMQ 交换机 Exchange 展开讲解,先通过电商下单场景分析生产者直接向多队列发送消息存在耦合严重、代码冗余、灵活性不足等缺陷;随后介绍 Exchange 的核心价值:作为生产者与队列的中间层,生产者仅将消息发送至交换机,由交换机依据对应规则完成消息路由分发。文中阐述 Exchange 两大核心工作流程,并梳理 Direct、Fanout、Topic、Headers 四种交换机的不同匹配路由规则;最终总结使用 Exchange 可解耦生产者与队列,新增或调整下游队列无需修改生产者代码,统一管理消息路由逻辑,区分生产者 “发送消息”、交换机 “分发消息” 的职责,文末预告下一讲将讲解 Direct 交换机。

辰风沐阳 阅读 103 2026-07-03