消息队列中消息消费失败后的处理机制

时间:2020-09-30 18:11:05   收藏:0   阅读:516

RocketMQ 中的机制

RocketMQ 中,消息消费结果的返回值有2个:ConsumeConcurrentlyStatus.CONSUME_SUCCESS 和 ConsumeConcurrentlyStatus.RECONSUME_LATER。
前者为消费成功,後者表示消费失败。消费失败后,RocketMQ会在特定时间间隔后进行重试,重试次数越多,时间间隔越长。

默认最多可以重试16次,每次重试的时间间隔为:

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

RabbitMQ 中的机制

RabbitMQ 中,消息消费确认模式有如下3种:

在Spring Boot中配置消费确认模式的配置:

spring.rabbitmq.listener.simple.acknowledge-mode = manual

手动确认模式中,如果消息消费失败,可以选择是否将消息重新放入队列。
消息消费失败后如果重新放入队列,RabbitMQ会立刻将消息重新推送给消费者,而没有延迟推送的机制。
此时很可能会出现一直失败并抛出异常的情况,浪费了资源,并导致日志爆满,并淹没最初几条有用的异常日志信息(Java中如果多次抛出同样的异常,打印日志时会省略部分异常堆栈)。

参考文档

  1. RocketMQ消费消息失败的处理办法
  2. RabbitMQ的消息确认机制

原文:https://www.cnblogs.com/haycheng/p/13755679.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!