如何使用 Java Camel DSL 设置最大重新交付次数



我想将重新交付限制使用 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));

最新更新