Java 在包含聚合器的路由中使用OneException

Java 在包含聚合器的路由中使用OneException,java,exception-handling,apache-camel,onexception,Java,Exception Handling,Apache Camel,Onexception,我试图在路由中使用一个onException子句,该子句中还包含一个聚合器。 我希望每当在聚合器的aggregate()方法中抛出异常时,OnException子句应该捕获它,处理它并重新传递它。然而,这似乎没有发生。 谁能告诉我哪里出了问题 from("jms:queue:start?concurrentConsumers=10").routeId("testRoute") .onException(Exception.class).log("Exception caught"

我试图在路由中使用一个onException子句,该子句中还包含一个聚合器。 我希望每当在聚合器的aggregate()方法中抛出异常时,OnException子句应该捕获它,处理它并重新传递它。然而,这似乎没有发生。 谁能告诉我哪里出了问题

from("jms:queue:start?concurrentConsumers=10").routeId("testRoute")
        .onException(Exception.class).log("Exception caught").process(new Processor() {

            @Override
            public void process(Exchange exchange) throws Exception {
                logger.debug("****Exception caught***");

            }
        })
        .handled(true).maximumRedeliveries(-1).end()
        .transacted()
        .aggregate(header("correlationHeader"), new CustomAggregator())
        .completionSize(50).
    to("jms:queue:end");
其中CustomAggregator是我的聚合器,在它的聚合方法中,我抛出一个异常来测试我的异常处理


任何帮助或建议都将不胜感激。

尝试在路线中添加一个。浏览一下您的DSL,一切看起来都是可以接受的,尽管我不会为语句和都输出日志项的自定义处理器而烦恼,只需让log EIP语句指定日志级别即可。最后,再次检查日志记录级别是否足够低,以输出调试条目。当日志不打印时,一个常见的“错误”是日志级别太严格。为什么不依赖JMS内置的重新交付可能性?@ProgrammerDan:我同意你关于冗余日志的评论。这是我实际路线的模糊版本,我正在使用它来测试错误处理。@Peter:我之所以试图避免JMS内置的重新交付,是因为我不希望日志中出现错误消息,也不希望回滚所有事务,只应回滚失败的事务。您的情况听起来相当复杂。如果不记录错误,是否至少要使用死信队列来跟踪失败消息?我不确定为什么例外策略似乎对您不起作用,但可能需要更多关于您的总体策略的详细信息来帮助您。