C Websphere MQ-具有多个使用者的主题订阅

C Websphere MQ-具有多个使用者的主题订阅,c,ibm-mq,C,Ibm Mq,我有一个微型服务,它订阅WebSphere MQ中的主题。订阅是管理的和持久的。我显式地设置了订阅名称,以便在从任何微服务故障中恢复后,可以使用它连接回队列。订阅按预期工作 但我可能不得不扩大微服务的规模并运行多个实例。在这种情况下,我最终将有多个消费者访问同一主题。但在这里,它失败了,出现错误2429:MQRC\u SUBSCRIPTION\u IN\u USE。我无法对主题订阅运行多个使用者。注意:消息应仅发送给其中一个使用者 有什么想法吗 IBM Websphere版本:7.5 我使用C-

我有一个微型服务,它订阅WebSphere MQ中的
主题
。订阅是
管理的
持久的
。我显式地设置了
订阅名称
,以便在从任何微服务故障中恢复后,可以使用它连接回队列。订阅按预期工作

但我可能不得不扩大微服务的规模并运行多个实例。在这种情况下,我最终将有多个消费者访问同一主题。但在这里,它失败了,出现错误
2429:MQRC\u SUBSCRIPTION\u IN\u USE
。我无法对主题订阅运行多个使用者。注意:消息应仅发送给其中一个使用者

有什么想法吗

IBM Websphere版本:7.5
我使用C-client API连接到MQ。

当使用订阅服务器时,您描述的仅通过IBM MQ Classes for JMS API支持。在v7.0及更高版本中,您可以使用克隆订阅(这是JMS规范的IBM扩展),此外,在MQ v8.0及更高版本中,您还可以交替使用共享订阅,这是JMS 2.0规范的一部分。通过这两个选项,多个订阅者可以连接到同一个订阅,其中只有一个将接收每个已发布的邮件


更新20170710

根据此APAR,XMS.NET还应支持克隆订阅,但由于存在缺陷,在8.0.0.8或9.0.0.2之前,或者如果您请求IFIX用于上述APAR,则不支持克隆订阅


通过将微服务转换为从队列获取,而不是订阅主题,您可以实现与其他API(如C)类似的功能

要将已发布的消息发送到队列,您有两个选项:

  • 在队列管理器上设置管理订阅。你可以用几种不同的方法来做。下面的示例将使用MQSC命令

    DEFINE SUB('XYZ')TOPICSTR('SOME/TOPIC')DEST(SOME.QUEUE)

  • 创建一个实用程序应用程序,该应用程序可以打开队列并使用提供的队列创建持久订阅,此应用程序的唯一目的是订阅和取消订阅提供的队列,它不会用于消费任何已发布的消息


  • 使用上述方法,每个已发布的消息只能由一个进程或线程从队列中读取(获取)