2011-08-24 137 views
2

我正在使用websphere mq和JMS API來連接到MQ.I使用消息選擇器來連接和分組消息。Websphre MQ識別連接的客戶端

其實我的問題是,有些情況下JMS客戶端可以連接相同的消息選擇器(CO關係ID),所以每當任何客戶端嘗試連接到MQ,然後我想要一種方法來檢查是否有任何其他具有相同消息選擇器的客戶端已連接或不連接,如果存在,則需要阻止他連接,我將中止他的連接。

有沒有什麼辦法在連接之前攔截Websphere MQ連接?

問候, 普拉

回答

2

你不能這樣做直接在連接時,在JMS消息選擇在時間不確定你創建的連接:即你先做

連接c = myConnectionFactory.createConnection();

再後來就做

的MessageConsumer CON = mySession.createConsumer(mydestination中,mySelector);

所以當你連接隊列管理器無法知道你會隨後用什麼選擇器(或者即使你將在所有指定一個)

一種可能性是使用持久訂閱的方式,請參閱

http://download.oracle.com/javaee/1.3/api/javax/jms/TopicSession.html#createDurableSubscriber

(或跨域JMS 1.1當量)。這是唯一通過的clientId,用戶名和主題的組合來標識,並且JMS規範要求

如果用同一個客戶端的另一個連接正在運行... JMS提供者應該檢測到重複的ID和拋出一個InvalidClientIDException。

在ConnectionFactory上指定了客戶端ID,所以更接近你想要的,雖然切換到持久的Pub/Sub不一定是一個簡單的選項。甚至在考慮之前,你應該看看是否有針對「JMS客戶端可以使用相同消息選擇器連接的情況」的應用程序級修復程序。

+0

感謝您的回覆。其實我試圖使用相同的客戶端ID,但MQ允許連接,所以我也沒有得到任何異常。 – Pravin

+0

據我記得,客戶端ID只能使用耐用的pub/sub進行檢查,它不會在點對點或非持久pub/sub模式下強制執行 – strmqm