首页 > 解决方案 > 如果任何子消息失败,如何回滚拆分器的整个事务

问题描述

当前用例:通过以下配置,我们尝试使用自定义迭代器处理器拆分父消息,并根据其内容将不同的端点分配给测试处理器内的不同子消息。

from("endpoint")    
    .split().method(iteratorProcessor, "execute")
    .shareUnitOfWork()
    .stopOnException()
    .bean(testProcessor, "process") 
    .receipientList(header("destination"));

综上所述,成功案例按预期工作。

问题:如果拆分后,第一条消息发布成功而第二条消息发布失败,我们观察到第二条子消息单独被定向到错误处理程序。

要求:如果整个过程中出现任何故障,我们希望将IN消息重定向到错误处理程序(完成回滚),并且不要发布任何其他子消息。

标签: apache-camelrollback

解决方案


onException 子句提供了使用原始消息的选项。

来自骆驼文档:

onException(MyOrderException.class)
.useOriginalMessage()
.handled(true)
.to("jms:queue:order:failed");

推荐阅读