Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 在达到Camel中最大重新交付的阈值后执行任务_Apache Camel_Spring Camel - Fatal编程技术网

Apache camel 在达到Camel中最大重新交付的阈值后执行任务

Apache camel 在达到Camel中最大重新交付的阈值后执行任务,apache-camel,spring-camel,Apache Camel,Spring Camel,我已经在代码中使用camel retry实现了重试功能。它将重试最多五次 onException(Exception.class) .maximumRedeliveries(5) .retryAttemptedLogLevel(LoggingLevel.WARN) .backOffMultiplier(5) .maximumRedeliveryDelay(5) .useExponentialBackOff(); 现在,如果达到阈值,我想调用一个自定义方法

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

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

现在,如果达到阈值,我想调用一个自定义方法,而不是抛出异常。如何实现这一点?

您可以将
handled标志设置为true,然后调用自定义bean

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

这正是的用例。我建议将您的
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");