我正在尝试检查队列中是否有消息。要访问队列,我使用连接工厂、目标资源和 JNDI 查找(方法如下)。当连接工厂指向 Glassfish 3 集群中的多个节点时,就会出现问题。AddressList属性具有包含节点 IP 地址的列表。
解决它的一种方法是检查每个节点。有没有办法从 Glassfish 资源中定义的 JMS 连接工厂读取AddressList属性的值?
有没有其他方法可以检查 Glassfish 3 集群的所有节点上的队列中是否有消息?
不想将集群节点的地址保存在配置文件和 JMS 连接工厂中(连接工厂已在应用程序的其他部分中使用)。
谢谢。
private boolean existsMessagesOnTheQueue(String connectionFactoryName, Queue queue, String selector) throws Exception {
    QueueConnectionFactory connectionFactory;
    QueueConnection connection;
    Session session ;
    QueueBrowser browser ;
    try {
        connectionFactory = (QueueConnectionFactory) InitialContext.doLookup(connectionFactoryName);
        connection = connectionFactory.createQueueConnection();
        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        browser = session.createBrowser(queue, selector);
        connection.start();
        if (browser.getEnumeration().hasMoreElements()) {
            log.debug("Found message on " + queue.getQueueName());
            return true;
        }
    } finally {
        closeBrowser(browser);
        closeSession(session);
        closeConnection(connection);
    }
    return false;
}