达到Camel中maximumRedeliveries的阈值后执行任务

时间:2018-05-14 14:00:50

标签: apache-camel spring-camel

我已经使用camel重试在我的代码中实现了重试功能。它最多会重试五次。

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

现在我想调用自定义方法,如果已达到阈值而不是抛出异常。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

这是Dead Letter Channel EIP pattern的确切用例。我建议您将onException块转换为errorHandler并使用deadLetterChannel构建器。

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");

答案 1 :(得分:1)

您可以将handled-flag设置为true,然后调用自定义bean。

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