基于RabbitMQ实现延迟队列

正常情况:

复制代码
普通队列:生产者发消息 → 队列收到消息 → 消费者立刻监听、马上消费

TTL + DLX:

TTL:Time To Live,消息存活过期时间;

DLX:Dead Letter Exchange 死信交换机

流程
  1. 生产者发送消息到延迟缓冲队列 (这个队列没有消费者)
  2. 给这个队列配置两个参数:
    • x-message-ttl:消息多久过期(毫秒)
    • x-dead-letter-exchange:绑定死信交换机;x-dead-letter-routing-key:死信路由键
  3. 消息在缓冲队列停留,到达 TTL 时间 → 消息变成死信
  4. 死信自动转发到 DLX 死信交换机,再路由到目标业务队列
  5. 消费者监听这个业务队列,收到消息,实现延迟消费(例如订单 30 分钟未支付自动关闭)

其实还有插件可以使用,更直接:rabbitmq-delayed-message-exchange插件

安装后,创建一个延迟类型的交换机,配置好延迟参数即可

相关推荐
一条泥憨鱼2 天前
【消息队列】ACK确认了什么:消息队列可靠投递的完整链路
java·后端·kafka·消息队列·rabbitmq
后台模板学习4 天前
Kafka 与 RabbitMQ 在用户认证与权限管理场景
kafka·rabbitmq·linq
装不满的克莱因瓶5 天前
支付订单成功异步MQ权益发放设计和开发
java·架构·系统架构·rabbitmq·硬件架构
千里达景区票务系统5 天前
消息队列选型对比:RabbitMQ vs RocketMQ vs Kafka
kafka·消息队列·rabbitmq·rocketmq
未秃头的程序猿8 天前
@ConditionalOnMissingBean 把我配好的 RabbitMQ 手动 ack 吃掉了
后端·rabbitmq
一条泥憨鱼8 天前
【RabbitMQ】高级篇
java·分布式·rabbitmq·php·ruby
阳光不锈@11 天前
三大主流消息队列架构设计思想剖析:从 RabbitMQ 到 RocketMQ 的改造实践
kafka·rabbitmq·rocketmq·rabbit改造rocket·去除rabbitmq·rabbitmq改造
catino16 天前
RabbitMQ详解
分布式·rabbitmq·ruby
叶总没有会17 天前
RabbitMQ高级
分布式·rabbitmq