2013-10-02 112 views
0

問題: 多個使用者應用程序的活動規範附加到分佈式VM服務器上的單個MQ導致MQ消息中的空有效負載。 注意:請參閱底部的註釋。 mq沒有問題。多個Websphere應用服務器連接到單個Websphere MQ失敗

詳細信息: 我在2個VM服務器上部署了3個Websphere應用程序。 1個應用程序是發佈者,另外2個應用程序是連接到單個MQ管理器和MQ的消費者。 2消費者應用程序正在取消消息並對其進行處理。單獨服務器上的使用者應用程序接收一個空有效負載。我已經確認它似乎是一個將多個應用程序服務器實例連接到MQ的問題。通過在消費者2上部署服務器2上的發佈者來確認,則消費者1失敗。

問: 有沒有人嘗試安裝部署在單獨的服務器實例綁定到一個隊列管理器和一個MQ多MDB應用程序?

規格:

的Websphere 7,EJB 3.0 MDB的,事務在安裝在另一臺機器上的隊列截止,隊列。

目標:

分佈式計算,按比例放大對大量消息。

我在想這是一個配置問題,但不是100%確定在哪裏看。我讀過你可以使用MQLink,但我不明白爲什麼我需要使用服務總線集成。

支持Doucmentation: [MQ鏈接] [1次

更新:我解決了問題,這是一個相關的類加載器問題與重複類的組合。請參閱下面我添加的解決方案註釋編輯歷史: - 澄清規格,澄清問題並增加總體目標。 - 解決方案的參考說明。

回答

0

此特定問題是由Websphere控制檯中的代碼問題和類加載的組合設置爲「Parent First」引起的。在一個節點上它可以工作,並且集羣中的其他節點會失敗,我認爲這是由「Parent First」設置引起的。

更重要的是,就我在集羣中的配置而言,將多個活動規範綁定到單個MQ以提供分佈式計算是一個正確的解決方案。

但是,如果您正在尋找極高容量的解決方案,那麼到「nitgeek」解決方案參考文獻的「要點」。理解單個MQ可以具有非常高的深度並需要很多才能充分利用它是很重要的。我目前的配置是使用多個MDB進行快速配置和分佈式處理的一個很好的起點。

1

有沒有人試過附加部署在 上的多個MDB應用程序綁定到一個本地MQ?部署在不同的服務器

多MDB應用程序,連接到一個隊列管理器(但不同的隊列)是一種正常的情況下,我們有它無處不在,所有的應用程序正常工作。

但是,我懷疑你正在做的是:多個MDB應用程序部署在不同的服務器上,連接到一個隊列管理器和,監聽同一個隊列

在這種情況下,一個消息只會被一個消費者接收。

您需要爲每個應用程序創建單獨的隊列,併爲發佈者正在發佈的每個主題創建訂閱。

增加:

我懷疑,負載平衡,你可能會面臨的問題是,當你的第一個應用程序獲取消息時,它不會發出提交。所以,隊列中會有一條未被佔用的消息,這可能會阻止你的其他應用程序從隊列中獲取消息。當你的第一個應用程序完成處理時,它發出一個提交,但是它又一次準備好選擇該消息,因此它再次發出一個get。

在我的建築,我們已經實現了負載使用多個隊列管理器類似下面平衡:

您創建3個隊列管理器,說GatewayQMApp1QMApp2QM

使三個隊列管理器保持在同一個羣集中。

GatewayQM中創建別名隊列(在羣集中共享),並要求您的放置應用程序將消息放入網關隊列中。

現在在每個App1QM和App2QM中創建一個本地羣集隊列。分別通過應用程序App1和App2從這些隊列讀取。

此實施方案爲您提供更好的安全性並提供完美的負載平衡器。

+0

不,我想要聽同一隊列。其分佈式計算解決方案。您可以爲您的MDB定義您想要爲MDB提供的最大會話數。如果隊列中有5000條消息,並且每個部署的MDB需要15個線程(基於性能和硬件),則每個MDB將提取其最大數量並處理它們。我想我現在已經想清楚了,一旦我確認就會發布解決方案。 – haju

+0

好吧,所以它是你正在談論的負載平衡。如果兩個進程正在偵聽同一隊列,那麼肯定會在進程間分配消息。我在答覆中的意思是,同樣的信息不能同時存在。我會修改我的答案。 – nitgeek

+0

Ya負載平衡正在發生,它的正義信息在被輔助服務器拾取時被破壞。可以提交影響其他消費者的結果嗎? MQ只是一個帶有消息的代理,一旦發佈者發佈該消息,它不應該影響消費者方。您的解決方案將工作,基本上有一個網關,但要避免隊列管理器組縮小的矯枉過正。您可以在作爲物理隊列代理的應用程序服務器中添加本地隊列引用。那個或者一個MQ鏈路可以完成路由器,但需要更多的基礎設施。 – haju