rabbitmq+spring boot,我在配置中配置了重试间隔时间,但是不起作用是什么原因?
#重试间隔时间(单位毫秒)spring.rabbitmq.listener.simple.retry.initial-interval=5000@Overridepubl...
#重试间隔时间(单位毫秒)
spring.rabbitmq.listener.simple.retry.initial-interval=5000
@Override
public void onMessage( Message message, Channel channel) throws Exception{
long tag = message.getMessageProperties().getDeliveryTag();
String str = new String(message.getBody());
System.out.println("接收到来自topic.messagesPC队列的消息:"+str);
String[] strings = StringUtils.split(str, "\\|");
System.out.println("分割之后出现的新string:........"+strings[0]);
System.out.println("分割之后出现的新string:........"+strings[1]);
try {
channel.basicNack(tag, false, true);
System.out.println("消费异常,正在重试!");
} catch (Exception e) {
// channel.basicReject(tag,true);
System.out.println("-------------------------");
}
// System.out.println("消费结束!");
} 展开
spring.rabbitmq.listener.simple.retry.initial-interval=5000
@Override
public void onMessage( Message message, Channel channel) throws Exception{
long tag = message.getMessageProperties().getDeliveryTag();
String str = new String(message.getBody());
System.out.println("接收到来自topic.messagesPC队列的消息:"+str);
String[] strings = StringUtils.split(str, "\\|");
System.out.println("分割之后出现的新string:........"+strings[0]);
System.out.println("分割之后出现的新string:........"+strings[1]);
try {
channel.basicNack(tag, false, true);
System.out.println("消费异常,正在重试!");
} catch (Exception e) {
// channel.basicReject(tag,true);
System.out.println("-------------------------");
}
// System.out.println("消费结束!");
} 展开
1个回答
展开全部
在介绍具体的实现思路之前,我们先来介绍一下RabbitMQ的两个特性,一个是Time-To-Live Extensions,另一个是Dead Letter Exchanges。
Time-To-Live Extensions
RabbitMQ允许我们为消息或者队列设置TTL(time to live),也就是过期时间。TTL表明了一条消息可在队列中存活的最大时间,单位为毫秒。也就是说,当某条消息被设置了TTL或者当某条消息进入了设置了TTL的队列时,这条消息会在经过TTL秒后“死亡”,成为Dead Letter。如果既配置了消息的TTL,又配置了队列的TTL,那么较小的那个值会被取用。更多资料请查阅官方文档。
Dead Letter Exchange
刚才提到了,被设置了TTL的消息在过期后会成为Dead Letter。其实在RabbitMQ中,一共有三种消息的“死亡”形式:
消息被拒绝。通过调用basic.reject或者basic.nack并且设置的requeue参数为false。
消息因为设置了TTL而过期。
消息进入了一条已经达到最大长度的队列。
Time-To-Live Extensions
RabbitMQ允许我们为消息或者队列设置TTL(time to live),也就是过期时间。TTL表明了一条消息可在队列中存活的最大时间,单位为毫秒。也就是说,当某条消息被设置了TTL或者当某条消息进入了设置了TTL的队列时,这条消息会在经过TTL秒后“死亡”,成为Dead Letter。如果既配置了消息的TTL,又配置了队列的TTL,那么较小的那个值会被取用。更多资料请查阅官方文档。
Dead Letter Exchange
刚才提到了,被设置了TTL的消息在过期后会成为Dead Letter。其实在RabbitMQ中,一共有三种消息的“死亡”形式:
消息被拒绝。通过调用basic.reject或者basic.nack并且设置的requeue参数为false。
消息因为设置了TTL而过期。
消息进入了一条已经达到最大长度的队列。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |