【问题标题】:How to do a transactional get from Websphere MQ in .NET?如何在 .NET 中从 Websphere MQ 进行事务获取?
【发布时间】:2010-06-21 13:01:18
【问题描述】:
我正在编写一个客户端,它接收来自外部 Websphere MQ 队列的消息并将它们放在内部 MSMQ 队列中。客户端将使用 MQ 客户端,或者最好是纯托管的 (MQC.TRANSPORT_MQSERIES_MANAGED)。
基于example from IBM,我有一个版本正在运行,可以执行简单的 IBM.WMQ.MQQueue.Get(...)。如何在事务中完成此操作?我正在考虑使用非 XA 事务。
【问题讨论】:
标签:
.net
transactions
msmq
ibm-mq
【解决方案1】:
WMQ 单阶段提交通过在放置消息时使用 MQC.MQPMO_SYNCPOINT 标志或在获取消息时使用 MQC.MQGMO_SYNCPOINT 标志来启用。要完成工作单元,请调用队列管理器对象的 Commit 或 Backout 方法。
参考:手册中MQQueueManager 部分中的 Backout 和 Commit 方法。
只要您使用托管代码,您就只能进行 1 阶段提交。如果在绑定模式下使用非托管代码(使用共享内存与本地 WMQ QMgr 对话),您可以使用 XA。在这种情况下,您需要使用 Begin 方法。