我使用websphere mq和JMS API连接到MQ。我正在使用消息选择器来连接和分组消息。
实际上我的问题是在某些情况下JMS客户端可以连接相同的消息选择器(CO-relation ID),因此每当任何客户端尝试连接到MQ时,我想要一种方法来检查是否还有其他具有相同消息选择器的客户端是否已连接,如果存在,则需要阻止他连接,我将中止其连接。
在连接之前有没有办法拦截Websphere MQ连接?
此致 普拉
答案 0 :(得分: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规范要求
如果具有相同clientID的另一个连接已在运行... JMS提供程序应检测到重复的ID并抛出InvalidClientIDException。
客户端ID在ConnectionFactory上指定,因此更接近您想要的,尽管切换到持久的Pub / Sub不一定是一个简单的选项。在考虑之前,您应该查看是否存在针对“JMS客户端可以使用相同的消息选择器连接的情况”的应用程序级修复程序