rabbitmq中没有延迟队列但是可以使用TTL+死信队列进行消息延迟。
作用:订单支付,超时后发送消息进行检查订单支付状态,如果未支付则取消订单回滚库存。
为什么TTL+死信队列可以进行过期发送呢。
其中TTL可以设置消息过期时间,Time To Live。而死信顾名思义则是遗言,则消息死亡时发送。
消息成为死信的三种情况:
1.
队列消息长度到达限制;
2.
消费者拒接消费消息,
basicNack/basicReject,
并且不把消息重新放入原目标队
列
,requeue=false
;
3.
原队列存在消息过期设置,消息到达超时时间未被消费;