最近自己写的一个项目中需要实现红包退还的功能,感知红包时间过期然后如果仍未被抢完就需要退还,其中我的方案是使用rabbitmq实现的死信队列解决的。
关于rabbitmq的简单使用看我之前的博客https://blog.csdn.net/weixin_40840879/article/details/92836319
什么是死信队列?
在队列中的消息有两种情况下会被判断为死信
1.超过TTL(time to live)设置规定生存时间,也就过期的消息
2.被拒绝的消息(basicreject)并且设置不重新放入队列(requeue = false)的消息
这时候死信队列会将死信转发到新的队列,对应消费者从中取出消费死信
也就说消费者监听 消费队列 就可以拿到已成为死信的消息并进行消费,我的红包退还解决方案就是,每当发布新的红包时,将红包id与用户id存在一个消息并设置过期时间发送给死信队列,当死信队列判断该消息已过期就转发到消费队列,再从消费队列取出消息进行消费也就是判断sh是否需要退还红包等业务逻辑操作。