Я пытаюсь осуществить восстановление весной amqp. Я использовал приведенный ниже код для реализации того же
RetryOperationsInterceptor retryInterceptorBuilder =RetryInterceptorBuilder.stateless()
.maxAttempts(5)
.recoverer(new CustomRejectAndDontRequeueRecoverer())
.build();
container.setAdviceChain(new RetryOperationsInterceptor[]{retryInterceptorBuilder});
Вышеуказанный контейнер является экземпляром SimpleMessageListenerContainer
. Теперь в один из моих приемников я кидаю ClassCastException
.
public class CustomRejectAndDontRequeueRecoverer implements MessageRecoverer {
private static Logger logger = //created some logger instance.
//Overriding the method to do custom task when the retries are exhausted, like insert in database.
@Override
public void recover(Message message, Throwable cause) {
logger.error("The recovery method is called","","");
throw new RuntimeException(cause);
}
}
Пожалуйста, направьте меня в правильном направлении.
Обновление:
В моем CustomMessagingPostProcessor выдается некоторое исключение. Мой RetryOperationsInterceptor повторяет сообщения только в том случае, если исключение выдается в методе onMessage (). Добавление определения CustomMessagingPostProcessor: -
public class MTMessagingPostProcessor implements MessagePostProcessor{
/**
* {@inheritDoc}
*/
@Override
public Message postProcessMessage(Message message) {
logger.xdebug("Inside MTMessagingPostProcessor",
//Throwing exception to show that some exception can be thrown in original code and I want to requeue messages to come here for n number of times.
throw new RuntimeException("TEST");
//return message;
}
public void setTenantProvider(TenantProvider tenantProvider) {
this.tenantProvider = tenantProvider;
}
}
Я хочу запрашивать сообщения n раз, если в MTMessagingPostProcessor генерируется исключение, это не достигается перехватчиком, поскольку он повторяет сообщения в методе onMessage () слушателя.