我需要XA交易吗? DefaultMessageListenerContainer本地事务与XA连接工厂

时间:2016-02-16 12:19:25

标签: java spring transactions spring-jms xa

在我的Spring Boot应用程序中,我有以下场景:

  1. 从JMS队列中读取消息
  2. 用数据做一些事情。
  3. 对Oracle数据库执行JDBC插入
  4. 如果在任何阶段发生异常,我希望确保消息不会丢失并放在退出队列中。

    在启用XA的JMS连接工厂和启用XA的Oracle数据库驱动程序之间是否需要XA事务?或者,将 DefaultMessageListenerContainer sessionTransacted 标志设置为 true 一起使用就足够了吗?

    如果第二个是正确答案,那么使用XA交易会有什么好处?

1 个答案:

答案 0 :(得分:1)

您可以通过使用Spring来同步两个事务并编写应用程序以处理重复传递的(小)可能性(当数据库提交但JMS回滚时,例如,由于之间的连接丢失),可以避免XA DB和JMS提交)。我建议你阅读Spring团队的Dave Syer的优秀Distributed transactions in Spring, with and without XA

如果javaworld将来某个时候移动该链接,请点击syer xa spring,您应该找到它。