SpringBoot: RabbitMQ 延时队列的实践(TTL+DLX)

本文介绍了如何利用RabbitMQ的TTL和DLX特性实现延时队列,避免了使用定时任务带来的资源消耗。通过设置消息存活时间和死信交换机,消息在超时后将进入死信队列,从而实现动态定时任务,如取消订单、发送提醒等。文中详细讲解了配置和实现过程,包括pom配置、application.yml配置、RabbitMQConfig配置、消费者和生产者的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


背景

实现动态的定时任务许多同学的第一反应就是通过spring的schedule定时任务轮询数据库来实现,这种方案有一下几点劣势:

  • (1)消耗系统内存,由于定时任务一直在系统中占着进程,比较消耗内存
  • (2)增加了数据库的压力,这个提现在两方面,一是长时间占着数据库的连接,查询基数大
  • (3)存在较大的时间误差

01 简介

延时队列,就是想要消息延迟多久被处理。

RabbitMQ本身是没有直接支持延迟队列功能,但是可以通过TTL和DLX模拟出延迟队列的功能。 通过RabbitMQ的两个特性来曲线实现延迟队列:Time To Live(TTL) 和 Dead Letter Exchanges(DLX)

TTL则刚好能让消息在延迟多久之后成为死信,另一方面,成为死信的消息都会被投递到死信队列里,这样只需要消费者一直消费死信队列里的消息就万事大吉了,因为里面的消息都是希望被立即处理的消息。

1.1 死信队列 DLX

Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX。Dead Letter Exchange其实就是一种普通的exchange,和创建其他exchange没有两样。只是在某一个设置Dead Letter Exchange的队列(即延时队列)中有消息过期了,会自动触发消息的转发,发送到Dead Letter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Freedom3568

技术域不存在英雄主义,不进则退

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值