Apache camel 驼峰-如何定义errorHandler并使用includeRoutes?
我在子类中定义路由,并将它们与includeRoutes一起放在一个RouteBuilder中。现在我想插入一个默认的ErrorHandler,但我得到了错误消息: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
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循环添加的其他路由中,可能也是一个错误处理程序?啊,你说得对。有一个错误处理程序。这不应该发生!很抱歉谢谢你的帮助!