RabbitMQ 高级特性——TTL

在这里插入图片描述

前言

对于前面讲到的重试机制中,当确认策略为 MANUAL 手动确认的时候,如果消费者出现了程序逻辑错误,那么消息就无法被争取处理,那么就会执行 basicNack 方法,如果我们的 basicNack 方法的第三个参数的值为 true 的话,在只有这一个消费者的情况下,这个消息就会反复重新进入队列并且返回投递给这个消费者,那么在这个队列中的后面的消息就无法被提递给消费者,这样就导致了消息积压,那么如何处理这个问题呢?答案就是为消息或者队列设置 TTL(ime-To-Live)生存时间,当消息或者队列存在一段时间后就会被丢弃或者投递到死信队列中。那么这篇文章将介绍 RabbitMQ 中的 TTL。

TTL

TTL(Time-to-Live)过期时间,RabibtMQ 可以对队列和消息设置 TTL。当消息到达存活时间之后,如果该消息还没有被消费,那么就会被自动处理掉。

就是我们平时购物的时候,如果下单超过 24 消失还没有付款的话,订单就会被自动取消。

设置消息的 TTL

RabbitMQ 有两种设置 TTL 的方法,一是设置队列的 TTL,队列中的所有消息都有相同的过期时间,而就是对消息单独设置 TTL,每条消息的 TTL 可以不同。如果两种方式一起使用,则过期时间为两者的较小值。

先来看看如何对消息设置 TTL。

public static final String TTL_EXCHANGE = "ttl.exchange";
public static final String TTL_QUEUE = "ttl.queue";
@Bean("ttlExchange")
public DirectExchange ttlExchange() {
   
    return ExchangeBuilder.directExchange(Constants.TTL_EXCHANGE).durable(true).build();
}
    
@Bean("ttlQueue")
public Queue ttlQueue() {
   
    return QueueBuilder.durable(Constants.TTL_QUEUE).build();
}
    
@Bean("ttlBinding")
public Binding ttlBinding(@Qualifier("ttlQueue") Queue queue,@Qualifier("ttlExchange") DirectExchange exchang
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能再留遗憾了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值