我在子类中定义路线并将其与RouteBuilder
一起放在includeRoutes()
中。现在我想插入一个默认的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工作?
谢谢
答案 0 :(得分:0)
我认为您的问题在问题https://issues.apache.org/jira/browse/CAMEL-5612的评论中有所描述。
如果使用全局范围的errorHandler,则必须确保它应该像 以下:
而不是:
答案 1 :(得分:0)
尝试从路线中删除.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");
检查this page以获取有关Camel中死信频道的更多用法示例。