【发布时间】:2014-03-12 19:11:14
【问题描述】:
我有一条骆驼路线,如下所示。
from("jms:queue:start")
.transacted()
.bean(new FirstDummyBean(), "setBodyToHello")
.bean(new SecondDummyBean(), "setBodyToWorld")
.to("jms:queue:end")
bean 方法,顾名思义,将 body 分别设置为“Hello”和“World”。
我还有一个 onException 子句设置,如下所示:
onException(Exception.class)
.useOriginalMessage()
.handled(true)
.to("jms:queue:deadletter")
.markRollbackOnlyLast();
假设,我在队列“开始”上放置了一条消息,正文为“测试消息”。在 FirstDummyBean 中成功处理后,我在 SecondDummyBean 中抛出了一个 RuntimeException。 我期待看到实际消息或(原始消息内容完整,即“测试消息”)被发送到我的死信队列。
但是死信队列上的消息内容是“Hello”。
为什么会这样?..
我正在使用 apache camel 2.10.0。
还有人可以提供更多关于我如何同时使用errorhandler 和oneexception 子句的信息。 文件说:
如果您使用事务处理 DSL 将路由标记为事务处理,则 Camel 将自动使用 TransactionErrorHandler。它将尝试查找 global/per 路由配置的错误处理程序并在其为 TransactionErrorHandlerBuilder
时使用它 实例。如果不是 Camel 会自动创建一个临时的 TransactionErrorHandler 否决默认错误处理程序。这是约定优于配置。
如何在 JavaDSL 中使用 transactionerrorhandler 的示例会很棒。
【问题讨论】:
标签: java apache-camel