【问题标题】:Using Websphere MQ Topic .NET API使用 Websphere MQ 主题 .NET API
【发布时间】:2011-05-29 21:29:10
【问题描述】:

我读到了article

并且仍然不了解主题在 MQ 中如何工作的概念。 在 JMS 中,我知道您可以在主题上发布消息,并且为了接收来自它的消息,您首先需要订阅它(在接收阶段使用订阅名称)。

它在 MQ 中是如何工作的?我想写一个简单的场景(如在 JMS 中):

  • 1. 发布到主题
  • 2. 从主题接收 - 将失败(我尚未订阅)
  • 3. 订阅
  • 4. 接收 - 因为我在发布后订阅,所以没有任何接收
  • 5. 发布
  • 6. 接收 - 成功

    示例代码 (.NET) 会有所帮助

    男人

  • 【问题讨论】:

      标签: .net ibm-mq publish-subscribe mq websphere-7


      【解决方案1】:

      您查看过包含的示例代码吗?在默认安装中,它位于:
      C:\Program Files\IBM\WebSphere MQ\tools\dotnet\samples

      MQPubSubSample.cs 程序说明了托管和非托管代码的持久订阅和非持久订阅。在每种情况下,它首先订阅,然后发布,但您可以轻松地将其修改为问题中描述的发布/订阅/接收/发布/接收的用例。 (不过,您将无法接收尚未订阅的主题。)

      以下是示例代码中的部分内容:

        // Managed/nondurable
        string topicName = DEFAULT_TOPIC_STRING;
        string topicObject = null;
        int openOptionsForGet = MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_MANAGED | MQC.MQSO_NON_DURABLE;
        int destType = MQC.MQOT_TOPIC;
      
        try
        { 
          destForGet = mqQMgr.AccessTopic(topicName, topicObject, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, openOptionsForGet);
      
          messageForPut = new MQMessage();
          messageForPut.WriteString(DEFAULT_MESSAGE_DATA);
      
          mqQMgr.Put(destType, topicObject, null, topicName, messageForPut);
      
          messageForGet = new MQMessage();
      
          destForGet.Get(messageForGet);
      
          string messageDataFromGet = messageForGet.ReadLine();
      
          if(!DEFAULT_MESSAGE_DATA.Equals(messageDataFromGet))
            Console.WriteLine("Incorrect Message Received.");
      
          destForGet.Close();
        }
        catch(MQException mqE)
        {
          Console.WriteLine("MQException caught. " + mqE.ToString());
        }
      

      您的问题以 JMS 为例。请注意,您可以选择使用 IBM XMS - .Net 的可扩展消息服务客户端。 XMS 通过 .Net 实现 JMS API,使用 WMQ、WMB 或 WAS 作为传输,因此您只需很少修改即可使用 JMS 代码。 Message Service Client for .Net 2.0.0手册describes the offering


      .NET 消息服务客户端
      .NET 的消息服务客户端提供了一个称为 XMS 的应用程序编程接口 (API),它与 ​​Java 消息服务 (JMS) API 具有相同的接口集。 .NET 的消息服务客户端包含一个完全托管的 XMS 实现,它可以被任何 .NET 兼容的语言使用。 XMS 支持:

      • 点对点式消息传递
      • 发布/订阅风格的消息传递
      • 同步消息传递
      • 异步消息传递

      XMS 应用程序可以与以下类型的应用程序交换消息:

      • XMS 应用程序
      • WebSphere MQ JMS 应用程序
      • 本机 WebSphere MQ 应用程序
      • 使用 WebSphere 默认消息传递提供程序的 JMS 应用程序

      XMS 应用程序可以连接到以下任何消息服务器并使用其资源:

      • WebSphere MQ 队列管理器 - 应用程序可以以绑定或客户端模式进行连接。
      • WebSphere 服务集成总线 - 应用程序可以使用直接 TCP/IP 连接,也可以使用基于 TCP/IP 的 HTTP。
      • WebSphere Event Broker 或 WebSphere Message Broker 的代理 - 使用 WebSphere MQ 实时传输在应用程序和代理之间传输消息,并且根据配置,可以使用 WebSphere MQ 多播传输将消息传递到应用程序。

      通过连接到 WebSphere MQ 队列管理器,XMS 应用程序可以使用 WebSphere MQ Enterprise Transport 与 WebSphere Event Broker 或 WebSphere Message Broker 的代理进行通信。或者,XMS 应用程序可以使用 WebSphere MQ 发布/订阅代理。


      如果您想进一步探索,示例 XMS 代码位于前面提到的本机 .Net 示例下方的子目录中。样本在手册的Using the XMS Sample Applications 部分进行了描述。

      从 v7 开始,.Net 支持已集成到 WMQ 中。如果您缺少示例,那么您的 WMQ 客户端安装是后级或未完全安装。适用于 Windows 的最新 v7.0 WMQ 客户端可下载为SupportPac MQC7

      XMS 支持以SupportPac IA9H 的形式提供。

      【讨论】:

      • 感谢您的出色响应。我没有样本:-(。在上面的代码中,您已将主题打开为 MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION。这是否意味着它也对发布有效(显然是的,但反之亦然)?我在哪里获取订阅名称如果我想稍后访问它或者因为它作为非持久订阅打开它无法完成?如果我正在为我提到的每个步骤(发布/接收......)执行 AccessTopic 我怎么能在每个接收步骤上绑定订阅名称?谢谢。
      • 请参阅上面的编辑。示例代码中的不同部分应该回答其中一些问题。如果您检查对“JMS 接口和实现”的响应,您会看到我已通过持久/非持久订阅回复了您的问题。请注意,订阅必须在打开期间指定主题,但发布可以即时指定主题。将此与邮政投递相比较——您家门前的邮箱可提供任何出境地址,但只接收寄往该地址的邮件。生产者可以指定任何主题,但订阅者必须指定主题,即使只有通配符。
      • @T.Rob 在 Pub/Sub 模式中,我希望为每条新消息调用一些回调函数 为什么代码示例不包含它?它看起来像 P2P。
      • @YairNevet,产品有多个样品,支持回调。此示例并非旨在演示所有可能的模式,但确实说明了 OP 的特定需求。请参阅The Asynchronous consumption sample program
      猜你喜欢
      • 2011-02-10
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多