当前位置: 首页 > 知识库问答 >
问题:

如何使用.NET TransactionScope从MQ执行事务获取?

谷梁驰
2023-03-14

使用(TransactionScope范围=new TransactionScope()){q.put(putMsg,pmo);scope.complete();}

Q.关闭();qmgr.disconect();}

在我的代码中,这看起来像:

  // mq properties
  properties = new Hashtable();
  properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
  properties.Add(MQC.HOST_NAME_PROPERTY, HOSTNAME);
  properties.Add(MQC.PORT_PROPERTY, PORTNUMBER);
  properties.Add(MQC.CHANNEL_PROPERTY, CHANNELNAME);

  _queueManager = new MQQueueManager(queueManagerName, properties);
  _queue = _queueManager.AccessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_FAIL_IF_QUIESCING);
  _gmo = new MQGetMessageOptions();
  _gmo.Options |= MQC.MQGMO_WAIT;
  _gmo.Options |= MQC.MQGMO_SYNCPOINT;
  _gmo.WaitInterval = 1000;  // 1 seconds wait

  // in a loop
  using (TransactionScope t = new TransactionScope())
  {

  var message = new MQMessage();
  try
  {
     _queue.Get(message, _gmo);
  }
  catch (MQException mqe)
  { 
     message = null;
     if (mqe.ReasonCode == 2033)
     {
          Console.WriteLine("No message available");
     }
     else
     {
          throw;
      }
   }
   t.Complete();
 }

//Afterwards:

  if (_queue != null)
   {
  _queue.Close();
  _queue = null;
  }
  if (_queueManager != null)
  {
  _queueManager.Disconnect();
  _queueManager.Close();
  _queueManager = null;
  }
    null
    null

共有1个答案

壤驷高洁
2023-03-14

那么,您至少需要安装WebSphereMQV7.1客户端和队列管理器,以便使用TransactionScope在完全管理模式下运行全局事务。在这种情况下,MS DTC将是事务处理协调器。您发布的InfoCenter链接实际上指向WebSphereMQV7.1。

更新:
在MQV7.1之前,只有以MTS作为事务协调器的非托管模式才支持XA事务。下面是非托管模式下分布式事务的示例代码。您将需要安装一个附加组件,扩展事务客户端(XTC)。根据最新的公告,XTC是免费的。可以在MQ服务器安装映像中找到可安装的。

当MQ连接断开时(基本上调用了MQDISC),事务中任何未提交的消息都将回滚。因此,消息将重新出现在队列中。

 类似资料:
  • 我正在尝试整合payumoney支付网关在我的网站。我能完成交易。然而,我正在寻找一种方法,以获得已被收取的金额作为交易费的一个特定的交易。我在payumoney服务器在交易成功后发送的交易响应对象中找不到此字段,请帮助我。 示例: 响应对象:{“Country”:“”,“UDF10”:“”,“Discount”:“0.00”,“CardToken”:“789CE930DF72D5693ADFC”

  • 问题内容: 让我们以以下代码片段为起点: 现在,我想获取消息类型和例如对队列管理器的答复。不可能太难,但是我没有发现如何做的任何事情。 问题答案: 如果您查看MQMessage类的JavaDoc(http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJavaClasses/com/i

  • 问题内容: 让我们以以下代码片段为起点: 现在,我想获取消息类型和例如对队列管理器的答复。不可能太难,但是我没有发现如何做的任何事情。 问题答案: 如果您查看MQMessage类的JavaDoc(http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJavaClasses/com/i

  • 我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。

  • 我们有一个Spring Boot应用程序,它使用来自IBM MQ的消息进行一些转换,并将结果发布到Kafka主题。我们使用https://spring.io/projects/spring-kafka为了这个。我知道Kafka不支持XA;然而,在文档中,我找到了一些关于使用ChainedKafkaTransactionManager链接多个事务管理器并同步事务的输入。同一文档还提供了一个示例,说明

  • 我们已经整合贝宝支付网关在我们的网站和交易是工作良好的沙盒帐户在INR(不是美元)。但在支付成功后,paypal重定向到我们的网站,并在其上附加重定向url和查询字符串,如paymentId、token、PayerID,我们还从C#代码中获得交易ID。