我的骆驼路线如下。尽管我设置了handle(true),但我不明白为什么在所有重试都用尽之后defaulterrorhandler会调用fatalfallbackerrorhandler。
onException(Exception.class)
.handled(true)
.to("direct:errors") -----> (1)
;
from("direct:errors")
.log("hello world ");
from("timer:testRoute")
.routeId("testRoute_1")
.throwException(new Exception("Dummy Exception"))
.pollEnrich("file://source")
.to(http://localhost:8080)
日志:
20.04.03 11:46:53.907信息广告#6-timer:// testRoute route1 BreadCrumbId = ID-xxxxxx-1585894556662-0-4 |你好世界
20.04.03 11:46:53.913错误广告#6-timer:// testRoute mel.processor.DefaultErrorHandler BreadCrumbId = ID-xxxxxx-1585894556662-0-4 | (ExchangeId:ID-xxxxxx-1585894556662-0-4上的(MessageId:ID-xxxxxx-1585894556662-0-5)的传递失败。交付尝试后已用尽:4个被捕获:java.lang.Exception:虚拟异常。由失败处理器处理:FatalFallbackErrorHandler [Channel [sendTo(direct:// errors)]]
如果我在第(1)行中注释defaulterrorhandler没有调用fatalfallbackerrorhandler。
这看起来非常有效。我什至在测试类中进行了尝试,并且它按预期工作,计时器每秒“生成”一个日志条目。
实际上,是转发到direct:errors
的消息被重试5次,但不会成功。这很奇怪,因为direct
组件是骆驼核心的一部分。
我建议检查您的项目依赖项。您的类路径上是否有不同版本的Camel JAR?如果使用Maven,则可以尝试使用Maven enforcer plugin检查类路径冲突。