我想将重新交付限制使用 2 次。重新交付时,RedeliveryProcessor.process()
应该运行。
public class SimpleRouteBuilder2 extends RouteBuilder {
@Override
public void configure() throws Exception {
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
redeliveryPolicy = redeliveryPolicy.maximumRedeliveries(2);
onException(CamelCustomException.class)
.process((exchange) -> System.out.println("Handling exception..." + exchange))
.onRedelivery(new RedeliveryProcessor())
.redeliveryPolicy(redeliveryPolicy)
.log("Received body...")
.handled(true);
from("file:src/main/resources/data/input?noop=true")
.process(new MyProcessor())
.to("file:src/main/resources/data/output");
}
}
public class RedeliveryProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("redelivery processor...");
}
}
public class MyProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
System.out.println("hello test");
throw new CamelCustomException();
}
}
但是上面的代码重新交付了 2 次以上,并且RedeliveryProcessor.process()
没有运行:
你好测试
你好测试
你好测试
你好测试
你好测试
你好测试
您必须配置处于活动状态的错误处理程序(默认情况下为 DefaultErrorHandler(。
您可以在上下文级别(针对所有路由(或路由级别对其进行配置。重新交付有很多选择。
errorHandler(defaultErrorHandler()
.maximumRedeliveries(5)
.redeliveryDelay(10000));