MQ:如果消息回滚失败会怎样?
MQ: What happens if a message rollback FAILED?
我使用 IBM.XMS (9.1.0.0) 从我的 .NET 应用程序的队列中获取消息。
在会话下,我从队列中获取消息然后插入数据库(SQL服务器),如果一步失败,会话将回滚。该消息将 return 加入队列,以便我下次获取。这工作正常,直到有一天,一条消息丢失并且 MQ 日志显示:
IBM.XMS.XMSException: CWSMQ0067E: Rollback failed. The Backout()
operation on the underlying queue manager object failed.
Linked Exception : CompCode: 2, Reason: 2018
我不确定是否是这个错误的原因,所以我的问题是:如果出现“回滚失败”异常会发生什么,消息 return 是否返回队列?
一般情况下:如果您没有提交消息,但也没有成功回滚,消息将在稍后的某个时间点,当您的会话失效时自动回滚。
关于您的具体情况:
MQRC 2018 指示连接句柄无效。如果无法建立与队列管理器的连接,则可能会发生这种情况,因此连接句柄无效,但您还想使用此无效句柄继续操作。这样的操作包括调用回滚。
你说,如果一步失败,你调用回滚。获取 MQ 会话是导致回滚的这些步骤的一部分吗?这可以解释 2018 年。不要尝试回滚尚未成功建立的会话。它没有用,因为没有什么可以回滚,它是 2018 年附带的。
我使用 IBM.XMS (9.1.0.0) 从我的 .NET 应用程序的队列中获取消息。 在会话下,我从队列中获取消息然后插入数据库(SQL服务器),如果一步失败,会话将回滚。该消息将 return 加入队列,以便我下次获取。这工作正常,直到有一天,一条消息丢失并且 MQ 日志显示:
IBM.XMS.XMSException: CWSMQ0067E: Rollback failed. The Backout() operation on the underlying queue manager object failed.
Linked Exception : CompCode: 2, Reason: 2018
我不确定是否是这个错误的原因,所以我的问题是:如果出现“回滚失败”异常会发生什么,消息 return 是否返回队列?
一般情况下:如果您没有提交消息,但也没有成功回滚,消息将在稍后的某个时间点,当您的会话失效时自动回滚。 关于您的具体情况: MQRC 2018 指示连接句柄无效。如果无法建立与队列管理器的连接,则可能会发生这种情况,因此连接句柄无效,但您还想使用此无效句柄继续操作。这样的操作包括调用回滚。 你说,如果一步失败,你调用回滚。获取 MQ 会话是导致回滚的这些步骤的一部分吗?这可以解释 2018 年。不要尝试回滚尚未成功建立的会话。它没有用,因为没有什么可以回滚,它是 2018 年附带的。