我已经使用camel重试在我的代码中实现了重试功能。它最多会重试五次。
onException(Exception.class)
.maximumRedeliveries(5)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.backOffMultiplier(5)
.maximumRedeliveryDelay(5)
.useExponentialBackOff();
现在我想调用自定义方法,如果已达到阈值而不是抛出异常。我怎样才能做到这一点?
答案 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");