MQSeries:与 MCB 异步获取时是否可能 syncpoint/rollback?
MQSeries: Is syncpoint/rollback possible when getting asynchronously with MCB?
我想从 C 客户端的 MQS 队列中提取消息,并且很乐意以异步方式执行此操作,这样我就不必(明确地)启动多线程。消息将被转发到另一个运行 "transactionally" 但与 XA 完全不兼容的系统。所以我想有一种方法来显式提交(并因此删除)已成功传递给其他系统的消息,如果失败则 not 提交,以便最后保留消息以供以后更成功的尝试。
我已经阅读了有关 SYNCPOINT 选项的信息并了解我将如何在常规 GET 周围使用它,但是我还没有看到任何关于如何使异步消息检索具有这样的事务行为的提示。请问有什么提示吗?
编辑:我的误会,没有意识到应用程序正在使用回调来检索消息,这确实是完全异步的行为。请忽略下面的答案。
用 MQGMO_SYNCPOINT
执行 MQGET
,然后发出 MQCMIT
或 MQBACK
。
"Asynchronous" 和 "synchronous" 可能用词不当 - 这些是您使用 MQ 的 模式 - 无论您是否等待回复消息,这些模式不会影响 MQ 处理您的调用的方式。事务管理(工作单元管理)适用于任何使用 SYNCPOINT 的 MQI 调用,无论它们是否属于 request/reply 模式。
我认为您是在描述使用异步回调功能,即您注册了一个在消息到达时调用的例程,并要求任何 get 处于同步点下...其中一些工作原理的解释是在这里,https://share.confex.com/share/117/webprogram/Handout/Session9513/share_advanced_mqi.pdf 第 4+
页
实际上,您在同步点下使用 MQ 消息调用,使用另一个系统进行处理,然后在返回之前提交或回滚消息。
注意不要使用例如XA 2 阶段提交,总会有例如 windows提交到外部系统和断电意味着工作单元下的消息在 MQ 内部回滚,因为您没有时间执行提交。
我想从 C 客户端的 MQS 队列中提取消息,并且很乐意以异步方式执行此操作,这样我就不必(明确地)启动多线程。消息将被转发到另一个运行 "transactionally" 但与 XA 完全不兼容的系统。所以我想有一种方法来显式提交(并因此删除)已成功传递给其他系统的消息,如果失败则 not 提交,以便最后保留消息以供以后更成功的尝试。
我已经阅读了有关 SYNCPOINT 选项的信息并了解我将如何在常规 GET 周围使用它,但是我还没有看到任何关于如何使异步消息检索具有这样的事务行为的提示。请问有什么提示吗?
编辑:我的误会,没有意识到应用程序正在使用回调来检索消息,这确实是完全异步的行为。请忽略下面的答案。
用 MQGMO_SYNCPOINT
执行 MQGET
,然后发出 MQCMIT
或 MQBACK
。
"Asynchronous" 和 "synchronous" 可能用词不当 - 这些是您使用 MQ 的 模式 - 无论您是否等待回复消息,这些模式不会影响 MQ 处理您的调用的方式。事务管理(工作单元管理)适用于任何使用 SYNCPOINT 的 MQI 调用,无论它们是否属于 request/reply 模式。
我认为您是在描述使用异步回调功能,即您注册了一个在消息到达时调用的例程,并要求任何 get 处于同步点下...其中一些工作原理的解释是在这里,https://share.confex.com/share/117/webprogram/Handout/Session9513/share_advanced_mqi.pdf 第 4+
页实际上,您在同步点下使用 MQ 消息调用,使用另一个系统进行处理,然后在返回之前提交或回滚消息。
注意不要使用例如XA 2 阶段提交,总会有例如 windows提交到外部系统和断电意味着工作单元下的消息在 MQ 内部回滚,因为您没有时间执行提交。