【问题标题】:Transaction backed out with reason: 'The method 'xa_end' has failed with errorCode '100'交易因原因退出:“方法“xa_end”失败,错误代码为“100”
【发布时间】:2018-07-18 23:28:00
【问题描述】:

我使用 JBOSS 7 来托管我的 MDB 和 IBM MQ 作为我的消息传递提供程序。我正在使用 wmq.jmsra.rar 资源适配器与 IBM MQ 通信。

如果 Message1 被 MDB 消费,我们将消息内容存储到 DB 中。由于字段验证,它无法存储和抛出异常。我们处理了运行时异常并且 MDB 代码运行良好。现在,MDB 不再从队列中选择消息 2,而是继续再次选择消息 1 并一次又一次地处理......我们在日志文件中遇到错误。

2018-02-08 18:53:19,447 INFO  [org.jboss.as.connector.deployers.RaXmlDeployer] (default-threads - 17) wmq.jmsra.rar: MQJCA4026:Transaction backed out with reason: 'The method 'xa_end' has failed with errorCode '100'.'.
2018-02-08 18:53:19,448 WARN  [com.arjuna.ats.jta] (default-threads - 17) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a5b844a:bacea37:5a7c20fa:897, node_name=1, branch_uid=0:ffff0a5b844a:bacea37:5a7c20fa:898, subordinatenodename=null, eis_name=unknown eis name > (com.ibm.mq.connector.xa.XARWrapper@3d6ba018) failed with exception code XAException.XAER_NOTA: javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'.

【问题讨论】:

  • 如果 XA 事务旨在将 MQ GET 和 DB INSERT 作为一个工作单元提交,如果 DB INSERT 失败,则消息将被退回到队列中。如果您查看队列上的消息,您会注意到 MQMD 中称为“退出计数”的字段。这应该在每次退出时增加。 MDB 还将查看两个队列级别设置,BOQNAME 和 BOTHRESH。如果这些都被填写,MDB 会将“坏”消息移动到以 BOQNAME 命名的队列中,如果在获取时退出计数等于 BOTHRESH。
  • 如果以上方法可以解决您的问题,请告诉我,我会以答案形式写出来。
  • 亲爱的 Josh,我们如何处理从 MDB java 的角度一次又一次地选择相同消息的无限循环。
  • 嗨,普拉莫德,我在上面提出了一个解决方案,如果你想让我写下来,请确认这对你有用。它本质上会尝试按照您设置为 BOTHRESH 的次数处理消息,如果超过此次数,它会将消息移动到您在 BOQNAME 中指定的队列中。这些都是队列管理器端设置,因此 MQ 管理员需要设置它们。
  • 谢谢 JoshMc,我会与 MQ 团队取得联系..

标签: jboss jboss7.x ibm-mq


【解决方案1】:

您可以忽略 WARN 消息,并且可以假设 MQ 已丢弃事务的工作,因为 XAER_NOTA 指示资源适配器不再知道该事务。

【讨论】:

  • MQ 丢弃事务工作,我同意这一点。但是我的 MDB 继续一次又一次地选择相同的消息处理并且一次又一次地失败。
【解决方案2】:

请确保您使用的是 IBM MQ JCA 7.5.0.6 或更高版本。我相信您在 IBM MQ JCA 中遇到了一个已知错误。

【讨论】:

  • 亲爱的 Doug,我们使用的是 WMQ JCA 版本 7.5.0.7 版本
【解决方案3】:

我知道这是一个非常延迟的回复,但还是发布我的经验,因为它可能对其他人有用。

我见过类似的问题。就我而言,我们使用的是 ARJUNA 事务管理器,它隐藏了实际问题并引发了一般错误。请查看我的博客了解更多详情 https://jjsrambles.wordpress.com/2019/09/05/the-method-xa_end-has-failed-with-errorcode-100-or-the-method-xa_prepare-has-failed-with-errorcode-4/

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2017-07-20
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多