正常情况:
普通队列:生产者发消息 → 队列收到消息 → 消费者立刻监听、马上消费
TTL + DLX:
TTL:Time To Live,消息存活过期时间;
DLX:Dead Letter Exchange 死信交换机

流程
- 生产者发送消息到延迟缓冲队列 (这个队列没有消费者)
- 给这个队列配置两个参数:
x-message-ttl:消息多久过期(毫秒)x-dead-letter-exchange:绑定死信交换机;x-dead-letter-routing-key:死信路由键
- 消息在缓冲队列停留,到达 TTL 时间 → 消息变成死信
- 死信自动转发到 DLX 死信交换机,再路由到目标业务队列
- 消费者监听这个业务队列,收到消息,实现延迟消费(例如订单 30 分钟未支付自动关闭)
其实还有插件可以使用,更直接:rabbitmq-delayed-message-exchange插件
安装后,创建一个延迟类型的交换机,配置好延迟参数即可