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

Mut*_*mar 2 c ibm-mq

我有一个微服务,它topic在WebSphere MQ中订阅了一个.订阅是managed和durable.我明确地设置了subscription name,以便在从任何微服务故障中恢复后,它可以用于连接回队列.订阅按预期工作.

但我可能需要扩展微服务并运行多个实例.在这种情况下,我最终会有多个消费者参与同一主题.但在这里它失败了,错误2429 : MQRC_SUBSCRIPTION_IN_USE.我无法为主题订阅运行多个消费者.注意:消息应仅发送给其中一个消费者.

任何想法 ?

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

Jos*_*hMc 7

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


更新20170710

根据此APAR IV96489:XMS.NET不允许共享订阅,即使启用CLONESUP属性,XMS.NET也应该支持克隆订阅,但由于存在缺陷,直到8.0.0.8或9.0才支持. 0.2或者如果您要求上述APAR的IFIX.


您可以通过将您的微服务转换为从队列中获取而不是订阅主题来完成与其他API(如C)类似的操作.

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

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

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

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


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