在某些场景下,比如消费出现了异常,消费者在消费过程程序崩溃导致消息没有来得及处理完成等等等,我们需要消费者在消费失败情况下需要重新进行消费,这个时候消息重试配置派上用场了,一般配置重试也会配置死信队列一起使用。需要注意RabbitMQ配置需要在rabbit.bindings节点下,而不是在stream.bindings,stream的配置则要配置stream.bindings节点下。
spring:
cloud:
stream:
bindings:
demo-input:
destination: demo-xxx-data
binder: rabbit1
group: demo-xxx-data-group
consumer:
maxAttempts: 3
backOffInitialInterval: 10000
backOffMaxInterval: 200000
backOffMultiplier: 3.0
rabbit:
bindings:
# 对应上面bindings配置的demo-input
demo-input:
consumer:
acknowledge-mode: manual
requeue-rejected: false
recovery-interval: 3000
durable-subscription: true
max-concurrency: 5
maxAttempts
消息处理失败最大重试次数,包括第一次处理,设置为1关闭重试。
默认重试次数: 3
.
backOffInitialInterval
初始消息重试时间,时间单位毫秒,默认1s。
backOffMaxInterval
最大重试时间间隔,默认10s。
Default: 10000
.
backOffMultiplier
重试时间乘数,默认2
Default: 2.0
.
以上配置说明:假设第1次发送消息2022-07-27 16:49:13,如果消费消息失败或者移除,就会进行重试,其实也就是第二次发送重试消息的时间为2022-07-27 16:49:23,第三次发送消息时间为:10000*3(间隔时间*乘数)= 30000 ,即30s,小于最大重试时间间隔200是,所以第三次发送消息的时间为2022-07-27 16:49:53,(发送重试消息的间隔不能大于最大重试时间间隔,如果大于最大时间间隔就取最大时间间隔)