У меня есть конфигурация RabbitMQ для повтора с отслеживанием состояния, как показано ниже:
@Bean
public StatefulRetryOperationsInterceptor statefulRetryOperationsInterceptor(CustomMessageRecoverer customRecoverer) {
StatefulRetryOperationsInterceptor interceptor =
RetryInterceptorBuilder.StatefulRetryInterceptorBuilder.stateful()
.maxAttempts(2)
.recoverer(customRecoverer)
.build();
return interceptor;
}
@Bean
public SimpleRabbitListenerContainerFactory queueListenerConnectionFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory());
factory.setMessageConverter(jsonMessageConverter());
factory.setConcurrentConsumers(this.minConsumersCount);
factory.setMaxConcurrentConsumers(this.maxConsumersCount);
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
factory.setAdviceChain(statefulRetryOperationsInterceptor(messageRecoverer(rabbitTemplate(connectionFactory()))));
return factory;
}
В заголовке моего сообщения установлен ID. Однако, когда прослушиватель Rabbit генерирует исключение, повторная попытка не выполняется. Ниже приведен мой слушатель
@RabbitListener(queues = "myQueue")
public void consume(Message<MyDto> msg) throws Exception {
throw new Exception("Test Exception");
}
Что-то не так в моей реализации? Пожалуйста, предложите.