, если вы хотите контролировать поведение для каждого исключения, вы можете сделать следующее:
onException(MyRetryableServiceException.class)
.useOriginalMessage()
.redeliveryDelay(1000)
.backOffMultiplier(1.5)
.maximumRedeliveries(3)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.useExponentialBackOff();
Когда выдается MyRetryableServiceException
, сообщение будет доставлено согласно maximumRedeliveries
.
Вы можете определить несколько onException
или обернуть те, которые хотите повторить, в одно исключение ...
Это имеет приоритет над обработчиком ошибок по умолчанию, см. исключение-условие и обработка ошибок верблюда
Все остальное будет идти к ошибке по умолчанию, которая будет повторять все виды исключений ( до верблюда 2.x, без повторных попыток с версией> = 2.0 ). Если вы не переопределите это.
Итак, одним из возможных решений является определение OnException
для пропуска повторных попыток при ошибках аутентификации и оставить обработчик ошибок по умолчанию для повторной попытки других, если вы используете верблюд <2.0 </p>
Вы можете отключить обработчик ошибок по умолчанию с помощью noErrorHandler();
или настроить его, например:
errorHandler(
deadLetterChannel("seda:errors")
.logNewException(true)
.log("Unable to process ${body}")
.maximumRedeliveries(1)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.useExponentialBackOff()
);