RabbitMQ实现重试次数方法一-SpringRetry

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ实现重试次数方法一-SpringRetry相关的知识,希望对你有一定的参考价值。

参考技术A 一般来说 RabbitMQ 有个方法 channel.basicNack() 能够让消息回到队列中,这样可以实现重试。但是这样没有明确重试次数,如果当前的消息一直重试的话,则后面的消息就会堆积起来,导致后面的消息无法消费。这是一个致命的缺点。因此这就需要设置重试次数来解决这种问题。下面提供几种解决方案。

这一节介绍使用 spring-rabbit 自带的 retry 功能。

BackOffPolicy :重试的回退策略,指以何种方式进行下一次重试(第一次重试后什么时候进行第二次重试),比如过了15秒后重试,随机时间重试。
RetryPolicy :重试策略或条件,可以指定超时重试,一直重试,简单重试等。
MessageRecoverer :消息回收类,当所有的重试次数都失败后,就会调用该类的 recover 方法
RetryTemplate :组合了 BackOffPolicy , RetryPolicy , RetryListener ,执行重试步骤的具体类。
RetryOperationsInterceptor :方法执行失败的拦截器类,拦截失败后交给 RertyTemplate 去执行重试。
SimpleMessageListenerContainer :用于管理消费者。
RetryListener :重试过程的监听器,第一次重试调用该类的 open ,每次重试不成功调用 onError ,最后一次重试调用 close 。

设置消息确认模式为 auto , SpringBoot 环境添加以下配置。

配置 SimpleMessageListenerContainer ,并抛出异常重试。使用 simpleRabbitListenerContainerFactory 创建 SimpleMessageListenerContainer 有个好处就是在 application.properties 中对 SimpleMessageListenerContainer 的配置可以生效。比如配置 spring.rabbitmq.listener.simple.acknowledge-mode=auto 就可以直接生效。

以上是关于RabbitMQ实现重试次数方法一-SpringRetry的主要内容,如果未能解决你的问题,请参考以下文章

异步通信rabbitmq——消息重试

RabbitMQ的延时重试队列

rabbitmq~消息失败后重试达到 TTL放到死信队列(事务型消息补偿机制)

SpringBoot整合RabbitMQ--重试/消息序列化--方法/实例

SpringBoot整合RabbitMQ重试机制及配置

rabbitmqreject次数