Apache camel 驼峰截获事务提交

Apache camel 驼峰截获事务提交,apache-camel,spring-camel,Apache Camel,Spring Camel,我们正在考虑在我们的一个集成系统中使用Camel框架 处理速度是我们的主要要求之一,也是我们体系结构的一部分,我们正在考虑一种定制的缓存机制。在高级别上,如果缓存中存在某些数据,则无需将其从存储(例如数据库)中取出 然而,数据一致性是另一个重要要求。我们不希望缓存中的数据不反映存储中的数据。换句话说,只有在存储提交成功时,我们才需要写入(更新)缓存 因此,我的问题是,只有跨国路由完成时,执行操作(例如更新缓存)的最佳方式是什么。在普通的纯spring应用程序中,我会将TransactionalE

我们正在考虑在我们的一个集成系统中使用Camel框架

处理速度是我们的主要要求之一,也是我们体系结构的一部分,我们正在考虑一种定制的缓存机制。在高级别上,如果缓存中存在某些数据,则无需将其从存储(例如数据库)中取出

然而,数据一致性是另一个重要要求。我们不希望缓存中的数据不反映存储中的数据。换句话说,只有在存储提交成功时,我们才需要写入(更新)缓存

因此,我的问题是,只有跨国路由完成时,执行操作(例如更新缓存)的最佳方式是什么。在普通的纯spring应用程序中,我会将
TransactionalEventListener
TransactionPhase.AFTER_COMMIT
阶段一起使用,或者只使用普通的非声明性事务(在代码内部管理的事务的开始和结束)

Camel框架提供了很多很好的特性,所以不使用它会很遗憾,因为这是不可能的。我确信我们的用例没有那么不寻常,希望听到一些关于如何实现这一点的建议

提前谢谢大家,, 朱利安退房

默认情况下,当交换完成时将触发onCompletion,无论交换是成功完成还是失败完成(例如引发异常)。您可以将触发器限制为仅发生在CompleteOnly或onFailureOnly


谢谢我需要检查一下,然后回来找你。根据Camel In Action book的规定,
onCompletion()
所基于的UnitOfWork。在上引入了“以补偿其他资源中缺少事务支持”。通过在事务路由的onCompletion()代码中放置断点并检查来自不同会话的数据库内容,测试应该很容易。如果内容在那里,就意味着它可以按照我的要求工作。完美。正是我想要的。很好的解决方案。