延迟队列的介绍及常见问题
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小时后商家未处理,则默认同意,自动退款
