2017-04-21 290 views
2

我有一个微服务订阅了WebSphere MQ中的topic。订阅是manageddurable。我明确地设置了subscription name,以便在从任何微服务故障中恢复后,可以用它连接回队列。订阅按预期工作。我可能不得不扩展微服务并运行多个实例。在这种情况下,我最终会让多个消费者访问同一主题。但是在这里失败,错误为2429 : MQRC_SUBSCRIPTION_IN_USE。我无法为主题订阅运行多个使用者。注意:消息只应发送给其中一个消费者。Websphere MQ - 主题订阅多个消费者

有没有想法?

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

回答

6

使用订户时,您所描述的只有通过IBM MQ JMS API Classes支持。在v7.0及更高版本中,您可以使用克隆订阅(这是JMS规范的IBM扩展),另外在MQ v8.0和更高版本中,您可以交替使用属于JMS 2.0规范的共享订阅。通过这两个选项,可以将多个订户连接到相同的订阅,并且只有其中一个订阅者会收到每个发布的消息。


UPDATE 20170710

根据这个APAR IV96489: XMS.NET DOESN'T ALLOW SHARED SUBSCRIPTIONS EVEN WHEN CLONESUP PROPERTY IS ENABLED,XMS.NET也应该支持克隆订阅但是由于一个缺陷,这是将不支持,直到8.0.0.8或9.0 .0.2或者如果您要求IFIX以上的APAR。


您可以将您的微服务从队列中,而不是订阅主题得到实现与其他API像C类似的东西。

要获得发布的消息队列你有两个选择:

  1. 设置队列管理器的管理订阅。你可以用几种不同的方法来做到这一点。以下示例将使用MQSC命令。

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

  2. 创建一个实用的应用程序,可以打开一个队列,并建立与提供队列长期订阅,这个应用程序的唯一目的是订阅和退订所提供的队列中,它不会被使用消费任何已发布的消息。


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