延迟队列的介绍及常见问题

1.什么是延迟队列:

延迟队列是一个特殊的队列,消息发送之后,并不立即给消费者,而是等待特定时间后,才发送给消费者.

2.注意:Rabbit MQ本身并没有直接实现延迟队列,而是通过以下方式间接实现延迟队列的:

①:TTL+死信队列 组合

②:使用官方提供的延迟插件实现延迟功能

由于对消息设置TTL可能会导致消息执行先后的顺序问题 (在本人博客RabbitMQ常见高级特性里有说明),所以优先使用"队列TTL+死信队列"和"延迟插件"实现延迟队列

3.二者对比:

①:基于死信队列实现的延迟队列:

**<1>优点:**灵活不需要额外的插件支持

**<2>缺点:**a.存在消息顺序问题,b.需额外逻辑去处理死信队列消息

②:基于插件实现的延迟队列:

**<1>优点:**a.通过插件可直接创建延迟队列,简化了延迟消息的实现,b.避免DLX时序问题

**<2>缺点:**a.需依赖特定插件,有运维工作,b.只适用特定的MQ版本(插件最低支持Rabbit MQ的

3.6.0版本)

4.应用场景:

①:订单在规定时间内未支付自动取消

②:用户注册成功后,3天后发调查问卷

③:用户发起退款,24小时后商家未处理,则默认同意,自动退款

相关推荐
抓蛙师4 分钟前
多租户 tenant_id SQL 注入漏洞分析与应急响应报告
数据库·sql
ACP广源盛139246256738 分钟前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 私有化部署下 GSV2221 视频转换芯片机遇分析
大数据·数据库·人工智能
七牛开发者1 小时前
为什么 Go 很适合 AI 辅助开发?
数据库·人工智能·python·elasticsearch·log4j
Aphelios3802 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~2 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
Lam Tang2 小时前
APS 系列文章10
java·代理模式
考虑考虑3 小时前
Excel导入时产生特殊字符处理
java·后端·java ee
何以解忧,唯有..3 小时前
数据库索引失效的常见情况与优化策略
数据库·sql·oracle
Scabbards_3 小时前
面试Leetcode - Heap 堆
java·leetcode·面试
程序员清风4 小时前
专业再升级!程序员专属显示器明基RD280UG上手实测!
java·后端·面试