RabbitMQ创建死信队列实现延迟消费

最近自己写的一个项目中需要实现红包退还的功能,感知红包时间过期然后如果仍未被抢完就需要退还,其中我的方案是使用rabbitmq实现的死信队列解决的。

关于rabbitmq的简单使用看我之前的博客https://blog.csdn.net/weixin_40840879/article/details/92836319

什么是死信队列?

在队列中的消息有两种情况下会被判断为死信

1.超过TTL(time to live)设置规定生存时间,也就过期的消息

2.被拒绝的消息(basicreject)并且设置不重新放入队列(requeue = false)的消息

这时候死信队列会将死信转发到新的队列,对应消费者从中取出消费死信

也就说消费者监听 消费队列 就可以拿到已成为死信的消息并进行消费,我的红包退还解决方案就是,每当发布新的红包时,将红包id与用户id存在一个消息并设置过期时间发送给死信队列,当死信队列判断该消息已过期就转发到消费队列,再从消费队列取出消息进行消费也就是判断sh是否需要退还红包等业务逻辑操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
死信队列(Dead Letter Queue,简称DLQ)是 RabbitMQ 中的一种特殊队列,用于存储无法被消费者正确处理的消息。当消息被标记为死信时,它将被重新路由到死信队列中,而不是被丢弃或重新投递给原始队列。 在 RabbitMQ 中,死信消息的产生通常由以下几种情况引起: 1. 消息被拒绝(basic.reject或basic.nack)并且不重新入队。 2. 消息在队列中过期。 3. 队列达到最大长度限制。 使用死信队列可以实现一些重要的功能,例如: 1. 错误处理:将处理失败的消息转移到死信队列中,以便进一步分析和处理。 2. 延迟消息:通过设置消息的过期时间,将过期的消息路由到死信队列实现延迟处理。 3. 消息重试:可以通过设置死信队列和原始队列之间的绑定关系,将死信消息重新发送到原始队列进行重试。 要使用死信队列,需要进行以下步骤: 1. 创建一个普通的队列和一个死信队列。 2. 定义一个交换机和与普通队列绑定。 3. 设置普通队列的参数,包括最大长度、过期时间等。 4. 将死信队列和普通队列之间建立绑定关系,指定死信的路由键。 通过以上配置,当消息被拒绝、过期或达到最大长度时,会被路由到死信队列中。可以通过消费死信队列中的消息进行进一步处理或分析。 希望以上信息对你有帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值