【问题标题】:Websphre MQ identifying connected clientsWebsphere MQ 识别连接的客户端
【发布时间】:2011-11-02 11:46:47
【问题描述】:

我正在使用 websphere mq 和 JMS API 连接到 MQ。我正在使用消息选择器来连接和分组消息。

实际上我的问题是,在某些情况下,JMS 客户端可以使用相同的消息选择器(CO-relation ID)连接,所以每当任何客户端尝试连接到 MQ 时,我想要一种方法来检查是否有其他具有相同消息选择器的客户端是否已连接,如果存在则我需要阻止他连接我将中止他的连接。

有什么方法可以在连接之前拦截 Websphere MQ 连接?

问候, 普拉文

【问题讨论】:

    标签: ibm-mq


    【解决方案1】:

    您不能在连接时直接执行此操作,因为在 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、订阅者名称和 Topic 的组合唯一标识,并且 JMS 规范要求

    如果另一个具有相同 clientID 的连接已经在运行... JMS 提供者应该检测到重复的 ID 并抛出 InvalidClientIDException。

    客户端 ID 在 ConnectionFactory 上指定,因此更接近您想要的,尽管切换到持久 Pub/Sub 不一定是一个简单的选项。在考虑这一点之前,您可能应该看看是否有针对“JMS 客户端可以与相同消息选择器连接的情况”的应用程序级别修复

    【讨论】:

    • 感谢您的回复。实际上我尝试使用相同的客户端 ID,但 MQ 允许连接,所以我也没有收到任何异常。
    • 据我所知,客户端 ID 只会使用持久发布/订阅进行检查,不会在点对点或非持久发布/订阅模式下强制执行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2016-10-31
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2017-04-30
    • 2022-11-08
    相关资源
    最近更新 更多