使用WebSphereMQ主题.NETAPI

使用WebSphereMQ主题.NETAPI,.net,ibm-mq,publish-subscribe,mq,websphere-7,.net,Ibm Mq,Publish Subscribe,Mq,Websphere 7,我读了这个 仍然不理解MQ中主题的工作原理。 在JMS中,我知道您可以发布主题上的消息,为了从主题接收消息,您首先需要订阅它(在接收阶段使用订阅名称) 它在MQ中是如何工作的?我想编写一个简单的场景(如JMS): 一,。发布到主题 二,。从主题接收-将失败(我尚未订阅) 三,。订阅 四,。接收-由于我在发布后已订阅,因此未收到任何内容 五,。发表 六,。接收-成功 示例代码(.NET)将非常有用 Guy您看过附带的示例代码了吗?在默认安装中,它位于: C:\ProgramFiles\IBM\We

我读了这个

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

它在MQ中是如何工作的?我想编写一个简单的场景(如JMS):
  • 一,。发布到主题
  • 二,。从主题接收-将失败(我尚未订阅)
  • 三,。订阅
  • 四,。接收-由于我在发布后已订阅,因此未收到任何内容
  • 五,。发表
  • 六,。接收-成功

    示例代码(.NET)将非常有用


    Guy

    您看过附带的示例代码了吗?在默认安装中,它位于:
    C:\ProgramFiles\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作为示例。请注意,您可以选择使用IBMXMS-ExtensibleMessageServiceClient for.Net。XMS使用WMQ、WMB或WAS作为传输在.Net上实现JMS API,因此您只需很少修改即可使用JMS代码。手册:


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

    • 点对点式消息传递
    • 发布/订阅样式消息
    • 同步消息传递
    • 异步消息传递
    XMS应用程序可以与以下类型的应用程序交换消息:

    • XMS应用程序
    • webspheremqjms应用程序
    • 本机webspheremq应用程序
    • 使用WebSphere默认消息传递提供程序的JMS应用程序
    XMS应用程序可以连接到以下任何消息服务器并使用其资源:

    • WebSphere MQ队列管理器—应用程序可以以绑定或客户端模式连接
    • WebSphere服务集成总线—应用程序可以使用直接TCP/IP连接,也可以使用TCP/IP上的HTTP
    • WebSphere Event broker或WebSphere Message broker的代理—使用WebSphere MQ实时传输在应用程序和代理之间传输消息,并且根据配置,可以使用WebSphere MQ多播传输将消息传递到应用程序
    通过连接到WebSphereMQ队列管理器,XMS应用程序可以使用WebSphereMQ企业传输与WebSphereEventBroker或WebSphereMessageBroker的代理进行通信。或者,XMS应用程序可以使用WebSphere MQ发布/订阅代理


    如果您希望进一步研究,示例XMS代码位于前面提到的本机.Net示例下面的子目录中。本手册的章节介绍了这些样品

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


    XMS支持作为提供。

    感谢您的出色响应能力。我没有示例:-(.在上面的代码中,您已将主题作为MQC.MQTOPIC_open_as_SUBSCRIPTION打开。这是否意味着它对发布也是有效的(显然是的,但反之亦然)?如果我想稍后访问订阅名称,或者因为它是作为非持久订阅打开的,则无法访问订阅名称?如果我正在为我提到的每个步骤(发布/接收…)执行AccessTopic如何在每个接收步骤上绑定订阅名称?谢谢。请参阅上面的编辑。示例代码中的不同部分应回答其中一些问题。如果您检查对“JMS接口和实现”的响应您将看到我已使用持久/非持久订阅对您的问题进行了响应。请注意,订阅必须在打开期间指定主题,但出版物可以动态指定主题。将这与邮寄相比,您家门口的邮箱提供任何出站地址,但只接收发往该地址的邮件。制作人可以指定通知任何主题,但订阅者必须指定一个主题,即使只有一个通配符。@T.Rob在Pub/Sub模式中,我希望为每一条新消息调用一些回调函数。为什么代码示例不包含它?它看起来像P2P。@YairNevet,该产品有几个示例并支持回调。此示例不适用于恶魔列出每种可能的模式,但说明OP的具体需求。请参阅。