Websphere MQ - 多个消费者的主题订阅
Websphere MQ - Topic Subscription with multiple consumers
我有一个订阅 WebSphere MQ 中的 topic
的微服务。订阅是 managed
和 durable
。我明确设置了 subscription name
,以便在从任何微服务故障中恢复后,它可以用于连接回队列。订阅按预期工作。
但我可能必须扩展微服务和 运行 多个实例。在这种情况下,我将最终让多个消费者使用同一主题。但这里它失败并出现错误 2429 : MQRC_SUBSCRIPTION_IN_USE
。我无法 运行 多个消费者订阅该主题。注意:一条消息应该只发送给其中一个消费者。
有什么想法吗?
IBM Websphere 版本:7.5
我使用 C 客户端 API 连接到 MQ。
当使用订阅者时,您描述的内容仅通过 IBM MQ 类 for JMS API 得到支持。在 v7.0 和更高版本中,您可以使用克隆订阅(这是 IBM 对 JMS 规范的扩展),此外,在 MQ v8.0 和更高版本中,您可以交替使用作为 JMS 2.0 规范一部分的共享订阅。使用这两个选项,可以将多个订阅者连接到同一个订阅,并且只有其中一个订阅者会收到每条发布的消息。
更新 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 或如果您要求,才会支持上述 APAR 的 IFIX。
您可以通过将您的微服务转换为从队列中获取而不是订阅主题来完成与其他 API 类似的事情,例如 C。
要将已发布的消息发送到队列,您有两种选择:
在队列管理器上设置管理订阅。您可以通过几种不同的方式来做到这一点。下面的示例将使用 MQSC 命令。
DEFINE SUB('XYZ') TOPICSTR('SOME/TOPIC') DEST(SOME.QUEUE)
创建一个可以打开队列并使用提供的队列创建持久订阅的实用应用程序,此应用程序的唯一目的是订阅和取消订阅提供的队列,不会被使用使用任何已发布的消息。
使用上述方法,每条发布的消息只能由一个进程或线程从队列中读取(GET)。
我有一个订阅 WebSphere MQ 中的 topic
的微服务。订阅是 managed
和 durable
。我明确设置了 subscription name
,以便在从任何微服务故障中恢复后,它可以用于连接回队列。订阅按预期工作。
但我可能必须扩展微服务和 运行 多个实例。在这种情况下,我将最终让多个消费者使用同一主题。但这里它失败并出现错误 2429 : MQRC_SUBSCRIPTION_IN_USE
。我无法 运行 多个消费者订阅该主题。注意:一条消息应该只发送给其中一个消费者。
有什么想法吗?
IBM Websphere 版本:7.5 我使用 C 客户端 API 连接到 MQ。
当使用订阅者时,您描述的内容仅通过 IBM MQ 类 for JMS API 得到支持。在 v7.0 和更高版本中,您可以使用克隆订阅(这是 IBM 对 JMS 规范的扩展),此外,在 MQ v8.0 和更高版本中,您可以交替使用作为 JMS 2.0 规范一部分的共享订阅。使用这两个选项,可以将多个订阅者连接到同一个订阅,并且只有其中一个订阅者会收到每条发布的消息。
更新 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 或如果您要求,才会支持上述 APAR 的 IFIX。
您可以通过将您的微服务转换为从队列中获取而不是订阅主题来完成与其他 API 类似的事情,例如 C。
要将已发布的消息发送到队列,您有两种选择:
在队列管理器上设置管理订阅。您可以通过几种不同的方式来做到这一点。下面的示例将使用 MQSC 命令。
DEFINE SUB('XYZ') TOPICSTR('SOME/TOPIC') DEST(SOME.QUEUE)
创建一个可以打开队列并使用提供的队列创建持久订阅的实用应用程序,此应用程序的唯一目的是订阅和取消订阅提供的队列,不会被使用使用任何已发布的消息。
使用上述方法,每条发布的消息只能由一个进程或线程从队列中读取(GET)。