1

我使用骆驼重试在我的代码中实现了重试功能。它将重试最多五次。

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

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

4

2 回答 2

2

这是死信通道 EIP 模式的确切用例。我建议将您的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");
于 2018-05-14T20:06:16.620 回答
1

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

onException(Exception.class)
    .maximumRedeliveries(5)
    .retryAttemptedLogLevel(LoggingLevel.WARN)
    .backOffMultiplier(5)
    .maximumRedeliveryDelay(5)
    .useExponentialBackOff()
    .handled(true)
    .to("bean:myCustomBean");
于 2018-05-14T14:15:52.427 回答