延迟消息 = “消息在未来某个时间点才能被消费”,属于 异步事件驱动系统中最常见的需求 📌 如:订单未支付 30 分钟自动取消、T+1 清算、优惠券过期、短信失败重试、IoT 数据延迟触达
不同 MQ 的实现方式天差地别,本文一次讲透👇
🎯 一、业务为什么需要延迟消息?
🛒 电商订单:30 分钟未支付 → 自动关闭 📮 消息补偿:失败 3 次 → 5 分钟后重试 📆 分布式任务:T+1 资金结算 📊 IoT 数据:设备异常上报延迟推送
延迟消息不是可选项,而是分布式系统稳定性设计的“必需品”
🐇 二、RabbitMQ 延迟消息实现方式
RabbitMQ 原生不支持延迟队列 → 必须通过“技巧或插件”实现
🥇方式 1|TTL + DLX(死信队列)【最常用】
🧠 思路 = 消息 TTL → 过期 → 路由到 DLX → 消费者监听 DLX
🔧 适合:中低规模延迟任务,如订单取消
Java 示例(TTL + DLX)
// 死信交换机 & 队列 channel.exchangeDeclare("dlx.exchange", "direct", true); channel.queueDeclare("dlx.queue", true, false,