2014-02-05 48 views
0

我有一個部署在Jboss上的MDB,它從Websphere MQ隊列中獲取消息,查看每個消息頭中的GroupId和Sequence信息。一旦它獲取了一個組的所有序列,它收到的每條消息都會形成一條大消息並將其發送到另一個系統。部署在WAS 7集羣上的MDB

現在,MDB將部署在Websphere Application Server 7集羣環境中,並且我不確定是否有任何緩存/配置可用於收集羣集的一個實例的所有消息序列(否則,如果一個實例接收到一些消息部分,而另一個實例接收到其他消息部分,最後MDB將無法將一條大消息放在一起)

我讀到jms-ra資源適配器可以配置爲con。 sun.genericra.loadbalancing.selector =(例如對於其他實例,JMSType ='Instance1'等) JMSType頭應該出現在消息中,應該是'Instance1',例如1來處理這個消息。

但我不確定系統是否會將消息放入MDB從中取出它們的隊列將在其消息頭中發送這些信息。

有沒有辦法配置集羣來實現這個目標?

回答

0

在集羣環境中工作時,MDB獨立工作。有幾種方法可以實現同步。

1)您可以使用選擇器在羣集節點之間劃分消息流。這裏是文檔http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzal.doc%2Ffg20180_.htm 主要的問題是選擇器需要消息屬性中的一些信息來完成他們的工作。有人必須把它們放在那裏。

2)您可以在「共享」數據收集器(如數據庫)上進行同步。你會把收到的消息放在那裏。可以進一步處理異步或最後一個消息來基礎。

3)你可以自己做一個「代理」。你可以增加額外的「內部」隊列。從外部隊列中獲取多個MDB的消息,將它們進行分組並將第1點所需的屬性放入。然後將消息放入內部隊列中,並使用不同節點的選擇器在第1點中讀取它們。

+0

我想到了類似於第二點所描述的事情,但最後決定遵循這一點(圖6)http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/ index.jsp?topic =%2Fcom.ibm.websphere.nd.multiplatform.doc%2Finfo%2Fae%2Fae%2Fcjn_mdb_endpt_overview.html – kien

+0

此變體可能需要對軟件進行一些結構更改。在你的情況下,只有一個MDB將同時工作,所以如果工作是在MDB的過程中完成的,你將只有一個工作服務器在同一時間。您將不得不像第3點那樣構建體系結構,以便在羣集上使應用程序很好地工作。 –

+0

閱讀http://www.ibm.com/developerworks/websphere/library/techarticles/0602_currie/0602_currie.html使事情變得更容易(通過在Websphere中定義的激活規範中設置消息選擇器JMS_IBM_Last_Msg_In_Group = TRUE) – kien