我有一些客戶端既是消費者,又是訂閱ActiveMQ消息代理的單個主題的客戶端。所有的客戶端共享相同的代碼,實際上他們使用正好是相同的企業應用程序,包括:(1)產生消息的EJB,(2)消費該消息的MDB。如何讓我的MDB忽略來自其自身的消息?
問題是,如果我有客戶端A,B和C,並且如果A發出消息,則A,B,C都將接收到消息。我不希望A收到自己的消息。
因此,我使用了各種解決方案,最好的解決方案是在傳出消息上設置字符串屬性,例如, source = myVeryOwnID。然後在MDB中,我設置了一個消息選擇器,如來源<>'myVeryOwnID'。
不幸的是,這是一個糟糕的解決方案,因爲我必須在源代碼中設置此ID(在我的情況下,在註釋中)。這意味着在部署新客戶端時,我不能簡單地將.EAR文件給予某人,而必須使用唯一的「源」屬性專門重新編譯。
理想情況下,我想使用MAC地址作爲ID,或者Glassfish(我正在使用GFv3)內的ID設置。
任何解決方案或想法將不勝感激!
如果您使用glassfish,爲什麼'activemq'標籤?您是否使用Glassfish JMS或ActiveMQ? – skaffman 2010-02-21 11:26:31
但是,您要部署相同的EAR三次還是一次? – ewernli 2010-02-21 12:48:02
skaffman:我很抱歉沒有說清楚。我確實使用ActiveMQ,而不是與Glassfish捆綁在一起的OpenMQ。 ewernli:我希望三次部署相同的EAR。但是現在,我必須重新構建EAR(以確保源標識符不同)三次,然後進行部署。 – 2010-02-22 12:12:22