在达到 Camel 中的 maximumRedeliveries 阈值后执行任务
Execute task after reaching threshold for maximumRedeliveries in Camel
我已经使用 camel 重试在我的代码中实现了重试功能。它最多会重试五次。
onException(Exception.class)
.maximumRedeliveries(5)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.backOffMultiplier(5)
.maximumRedeliveryDelay(5)
.useExponentialBackOff();
现在我想在达到阈值时调用自定义方法而不是抛出异常。我怎样才能做到这一点?
您可以将 handled-flag
设置为 true,然后调用您的自定义 bean。
onException(Exception.class)
.maximumRedeliveries(5)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.backOffMultiplier(5)
.maximumRedeliveryDelay(5)
.useExponentialBackOff()
.handled(true)
.to("bean:myCustomBean");
这正是 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");
我已经使用 camel 重试在我的代码中实现了重试功能。它最多会重试五次。
onException(Exception.class)
.maximumRedeliveries(5)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.backOffMultiplier(5)
.maximumRedeliveryDelay(5)
.useExponentialBackOff();
现在我想在达到阈值时调用自定义方法而不是抛出异常。我怎样才能做到这一点?
您可以将 handled-flag
设置为 true,然后调用您的自定义 bean。
onException(Exception.class)
.maximumRedeliveries(5)
.retryAttemptedLogLevel(LoggingLevel.WARN)
.backOffMultiplier(5)
.maximumRedeliveryDelay(5)
.useExponentialBackOff()
.handled(true)
.to("bean:myCustomBean");
这正是 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");