我在Spring AMQP应用程序中有一个RabbitListener,我使用的是一个自定义的RabbitListenerFactory,它配置了一个SimpleRetryPolicy用于消息重试。但是,我希望排除某些异常,使其不被重试。目前,我的配置如下所示:
@Bean
fun retryPolicy(): SimpleRetryPolicy {
val exceptions = mutableMapOf<Class<out Throwable>, Boolean>(
ValidationException::class.java to false,
IllegalArgumentException::class.java to false,
EntityNotFoundException::class.java to false,
)
return SimpleRetryPolicy(6, exceptions, true)
}
@Bean
fun retryInterceptor(customMessageRecoverer: CustomMessageRecoverer): RetryOperationsInterceptor? {
return RetryInterceptorBuilder.stateless().retryPolicy(retryPolicy())
.backOffOptions(1000, 2.0, 5000)
.recoverer(customMessageRecoverer)
.build()
}
@Bean
fun myFactory(
configurer: SimpleRabbitListenerContainerFactoryConfigurer,
connectionFactory: ConnectionFactory,
customsMessageRecoverer: CustomMessageRecoverer,
): SimpleRabbitListenerContainerFactory {
val factory = SimpleRabbitListenerContainerFactory()
configurer.configure(factory, connectionFactory)
factory.setAdviceChain(workMessagesRetryInterceptor(customsMessageRecoverer))
return factory;
}
然而,我注意到,使用这个配置,根本不会执行重试,即使是对于不在排除列表中的异常。我如何修改这个配置,既排除特定的异常重试,如AuthoraizationException或IllegalArgumentException,又确保其他异常仍然根据重试策略重试?任何代码示例都将受到欢迎。提前感谢!
1条答案
按热度按时间jgovgodb1#
查看
SimpleRetryPolicy
的另一个构造函数:在您的情况下,
defaultValue
被设置为false
,意味着不重试其余未Map的异常。重试所有异常,并对mapped执行特定操作。