Apache camel 驼峰-如何定义errorHandler并使用includeRoutes?

Apache camel 驼峰-如何定义errorHandler并使用includeRoutes?,apache-camel,Apache Camel,我在子类中定义路由,并将它们与includeRoutes一起放在一个RouteBuilder中。现在我想插入一个默认的ErrorHandler,但我得到了错误消息: errorHandler must be defined before any routes in the RouteBuilder 这是我的代码: public class defaultRoutes extends RouteBuilder { public void configure() throws Except

我在子类中定义路由,并将它们与includeRoutes一起放在一个RouteBuilder中。现在我想插入一个默认的ErrorHandler,但我得到了错误消息:

errorHandler must be defined before any routes in the RouteBuilder
这是我的代码:

public class defaultRoutes extends RouteBuilder {
    public void configure() throws Exception {
        errorHandler(deadLetterChannel("direct:deadLetter").maximumRedeliveries(3));

        from("direct:deadLetter").id("deadLetter")
            .errorHandler(defaultErrorHandler().disableRedelivery())
            .log("${exception.stacktrace}")
            .setHeader("ErrorMessage",simple("${exception}",String.class))
            .setHeader("ErrorStacktrace",simple("${exception.stacktrace}",String.class))
            .to("activemqWithoutTransactions:errors");

        ...
        ...
        for(String Module: globalConfig.getLoadedModules()) {
            ...
            includeRoutes(routes);
        }
        ...
    }
我还测试了这个:

public class defaultRoutes extends RouteBuilder {
    public void configure() throws Exception {

        RouteBuilder errorHandler = new RouteBuilder() {
            public void configure() {
                errorHandler(deadLetterChannel("direct:deadLetter").maximumRedeliveries(3));
                from("direct:deadLetter").id("deadLetter")
                    .errorHandler(defaultErrorHandler().disableRedelivery())
                    .log("${exception.stacktrace}")
                    .setHeader("ErrorMessage",simple("${exception}",String.class))
                    .setHeader("ErrorStacktrace",simple("${exception.stacktrace}",String.class))
                    .to("activemqWithoutTransactions:errors");
            }
        };
        includeRoutes(errorHandler);
        ...
        ...
        for(String Module: globalConfig.getLoadedModules()) {
            ...
            includeRoutes(routes);
        }
        ...
    }
但这也会抛出相同的错误消息!我能做什么,让ErrorHandler工作


谢谢你

我想你的问题在本期评论中有所描述

如果使用全局作用域的errorHandler,则必须确保它与 以下:

错误处理程序 错误处理程序 路线 路线 而不是:

错误处理程序 路线 错误处理程序 路线 亲切问候,, soilworker

尝试从路由中删除.errorHandler行:

   from("direct:deadLetter").id("deadLetter")
        .errorHandler(defaultErrorHandler().disableRedelivery()) // this is incorrect
        .log("${exception.stacktrace}")
        .setHeader("ErrorMessage",simple("${exception}",String.class))
        .setHeader("ErrorStacktrace",simple("${exception.stacktrace}",String.class))
        .to("activemqWithoutTransactions:errors");

在Camel中查看死信频道的更多使用示例。

看看上面,我就是这么做的!ErrorHandler是第一个!当我不做for循环并在那里复制路由时,它就工作了。是的,但是在你用for循环添加的其他路由中,可能也是一个错误处理程序?啊,你说得对。有一个错误处理程序。这不应该发生!很抱歉谢谢你的帮助!