RabbitMQ实现延时队列

本文介绍了RabbitMQ如何通过配置死信队列和设置消息过期时间来模拟延迟队列功能,适用于订单超时处理、定时任务等场景。通过设置不同等级的延迟时间,如5秒、10秒、30秒、1分钟,实现不同延迟需求。代码示例展示了生产者和消费者的实现方式。
摘要由CSDN通过智能技术生成

       首先我先介绍一下延时队列的应用场景,延迟队列存储的对象是对应的延迟消息,所谓"延迟消息"是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费。

       延迟队列的使用场景有很多,比如:      

       在订单系统中, 个用户下单之后通常有 分钟的时间进行支付,如果 30 分钟之内没有支付成功,那么这个订单将进行异常处理,这时就可以使用延迟队列来处理这些订单了
      用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作。这时候就可以将用户指令发送到延迟队列,当指令设定的时间到了再将指令推送到智能设备

      在AMQP协议中,或者RabbitMQ本身没有直接支持延迟队列的功能,但是可以通过配置死信队列和设置消息或队列的过期时间来模拟出延迟队列的功能。

       在我个人文章里面实现死信队列的代码里其实已经隐约的体现了这一点,当我们将消息设置过期时间后,靠过期时间来触发死信队列将消息扔给替补队列进行处理的这个过程就是实现延迟队列。

在真实应用中,对于延迟队列可以根据延迟时间的长短分为多个等级,一般分为 秒、 10秒、 30 秒、 1分钟、 5分钟、 10 分钟、 30 分钟、 小时这几个维度,当然也可以再细化 下。

      首先介绍一下两种对消息设置过期的方法

消息过期

 1.对消息设置过期

2.对队列设置消息过期

       为了简化说明,这里只设置了 5秒、 10 秒、 30 秒、 1分钟这四个等级。根据应用需求的不同,生产者在发送消息的时候通过设置不同的路由键,以此将消息发送到与交换器绑定的不同的队列中。这里队列分别设置了过期时间为 5秒、 10 秒、 30 秒、 1分钟,同时也分别配置了 DLX 和相应的死信队列。当相应的消息过期时,就会转存到相应的死信队列(即延迟队列〉中,这样消费者根据业务自身的情况,分别选择不同延迟等级的延迟队列进行消费

 

代码如下:

/**
 * @Description: 消息队列配置类
 * @Author: zw
 */
@Configuration
public class RabbitConfig {


    /**
     * 死信队列跟交换机类型没有关系  不影响该类型交换机的特性.
     */
    @Bean
    DirectExchange deadL
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值