2011-08-24 102 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