[英]JMS and JPA transactions without two phase commit (i.e. JTA is not supported)
我正在迁移在 JEE 应用程序服务器上运行的 Spring 启动应用程序,它使用 JTA 来协调 JMS 和 JPA 事务:
目标环境不支持 JTA 。
我正在寻找有关如何设置事务管理器的指导,以便:
任何文档或示例代码都会很棒。
提前谢谢了
对于没有资源支持 XA 或 JTA 的这种情况,一种可能的前进方式是:
...是使用配置为运行两个事务的“括号”事务管理器。 在高层次上,步骤如Dave Syer 的文章中所指定
Spring 数据项目提供了这样一个事务管理器:参见ChainedTransactionManager 。
当错误发生在提交数据库事务时(即第 5 步),此策略很有效。对于错误发生在 JMS 提交(即第 6 步)的情况,将以死信形式的消息结束。
使用 100,000 条消息测试此实现表明大约 0.005% 的消息以死信结束。 有些是在提交 JPA 事务时发生错误,有些是 JMS。
为了使系统可操作,无论故障点如何,死信中的消息都应该是可重试的。 这意味着括号事务管理器选项仅在应用程序更改为实现幂等性时才可行:跟踪已处理的 JMS 消息 ID。 当 JMS 消息 ID 已被处理时,应用程序必须跳过更新部分,即第 4 步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.