gpt4 book ai didi

java - 如何在提交时使用 JTA 确认 JMS 消息?

转载 作者:行者123 更新时间:2023-11-30 09:27:58 25 4
gpt4 key购买 nike

我为 JTA、两阶段提交、JMS 和 JDBC 事务而苦苦挣扎。这个想法(简而言之)是

  1. 在队列中接收消息
  2. 执行一些数据库操作
  3. 在数据库操作成功时确认消息

所以我得到了 XAQueueConnectionFactory,创建了 XAQueueSession,从 session 中创建了一个接收器并设置了一个消息监听器。

在监听器内部,在 onMessage 方法中,我开始我的用户事务,执行 jdbc 操作并提交事务或执行回滚(如果出现问题)。现在我期望(又名“希望”)在用户事务提交时确认该消息。

但这并没有发生,消息仍在队列中并一次又一次地重新传递。

我错过了什么?我仔细检查了 session ,确认模式确实是“SESSION_TRANSACTED”并且 getTransacted 返回 true。

我没有 Java EE 容器,没有 spring,没有消息驱动的 bean。我使用独立的 JTA bitronix。

最佳答案

您实际上并不需要 XA。只需遵循您的算法:接收消息,执行数据库操作,然后确认消息......从字面上看,这就是解决方案。 (而不是事务处理 session ,您可能只选择显式 CLIENT_ACKNOWLEDGE。)如果您的应用程序在执行数据库操作时失败,请不要确认 JMS 消息,它将被重新传送。如果您的应用程序在 DB txn 之后和 ack 之前失败,那么消息将被重新传递——但是您可以检测到这一点(重新传递的标志将在消息上设置为 true),并且您可以决定是否重新处理消息,基于数据库的状态。

关于java - 如何在提交时使用 JTA 确认 JMS 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14263386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com