Выполните задачу после достижения порога для максимального количества поставок в Camel - PullRequest
0 голосов
/ 14 мая 2018

Я реализовал функцию повтора в моем коде, используя верблюжий повтор.Он будет повторяться максимум пять раз.

onException(Exception.class)
    .maximumRedeliveries(5)
    .retryAttemptedLogLevel(LoggingLevel.WARN)
    .backOffMultiplier(5)
    .maximumRedeliveryDelay(5)
    .useExponentialBackOff();

Теперь я хочу вызвать пользовательский метод, если был достигнут порог, а не вызывать исключение.Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Это точный вариант использования для EIP-шаблона Dead Letter Channel .Я бы предложил преобразовать ваш onException блок в errorHandler и использовать deadLetterChannel builder.

errorHandler(
        deadLetterChannel("direct:redeliveryExhausted")
                .maximumRedeliveries(5)
                .retryAttemptedLogLevel(LoggingLevel.WARN)
                .backOffMultiplier(5)
                .maximumRedeliveryDelay(5)
                .useExponentialBackOff()
);

from("direct:redeliveryExhausted")
        .log("I am going to handle non-deliverable message")
        .log("Because of this exception: ${exception}")
        .to("log:failed");
0 голосов
/ 14 мая 2018

Вы можете установить для handled-flag значение true и затем вызвать свой пользовательский компонент.

onException(Exception.class)
    .maximumRedeliveries(5)
    .retryAttemptedLogLevel(LoggingLevel.WARN)
    .backOffMultiplier(5)
    .maximumRedeliveryDelay(5)
    .useExponentialBackOff()
    .handled(true)
    .to("bean:myCustomBean");
...