消息队列中消息消费失败后的处理机制
时间: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种:
- AcknowledgeMode.NONE:不确认
- AcknowledgeMode.AUTO:自动确认
- AcknowledgeMode.MANUAL:手动确认
在Spring Boot中配置消费确认模式的配置:
spring.rabbitmq.listener.simple.acknowledge-mode = manual
手动确认模式中,如果消息消费失败,可以选择是否将消息重新放入队列。
消息消费失败后如果重新放入队列,RabbitMQ会立刻将消息重新推送给消费者,而没有延迟推送的机制。
此时很可能会出现一直失败并抛出异常的情况,浪费了资源,并导致日志爆满,并淹没最初几条有用的异常日志信息(Java中如果多次抛出同样的异常,打印日志时会省略部分异常堆栈)。
参考文档
原文:https://www.cnblogs.com/haycheng/p/13755679.html
评论(0)