RabbitMQ 实现延迟队列


前言

在日常开发过程中,我们常常会遇到一些需要延迟处理的任务,如:当用户下单后未付款,30分钟后关闭订单。在对于实时性要求不高、简单的业务场景,我们往往可以采用定时任务的方式(每隔几分钟轮询一次数据库或redis)来实现,当要求实时性较高时可以考虑采用消息队列的延迟队列进行实现,不仅可以对业务解耦,具有更高的灵活性和扩展性,同时相比与轮询,不占用数据库昂贵的资源。

一、如何实现延迟队列?

这里我们需要预先了解 rabbitmq 的三个队列参数:

  • x-message-ttl: 消息过期时间,单位 ms;当投递的消息超时会被丢弃,如果设置了投递队列(从参数翻译则是死信队列)则会被投递到指定队列,通过这个参数我们可以指定当消息在一段时间后投递到我们的处理队列中进行处理。
  • x-dead-letter-exchange:死信(触发超时、丢弃时投递的)队列交换机。
  • x-dead-letter-routing-key:死信(触发超时、丢弃时投递的)队列路由键。

二、操作样例

  1. 创建一条带超时和死信投递参数的队列,这里超时设置为 5s。
    在这里插入图片描述
  2. 创建死信队列、交换机,并将队列绑定到交换机中。
    在这里插入图片描述
    在这里插入图片描述
  3. 消息投递测试
    在 delay5s 队列中投递一条测试消息。
    在这里插入图片描述
    观察到在延迟 5s 后,消息被投递到了 work-queue 中
    在这里插入图片描述

总结

至此实现 rabbitmq 的延迟队列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值