2017-04-21 109 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)。