spring 如何检查队列是否存在于ActivemQ“Classic”上?

zvokhttg  于 2023-10-15  发布在  Spring
关注(0)|答案(2)|浏览(118)

我有一个方法,当数据队列不存在时,它会抛出一个异常,但实际上并不存在。你还有别的办法解决吗?

public void checkDataQueue(String dataQueue) throws JMSException {
    Connection connection = null;
    Session session = null;
    connection = jmsTemplate.getConnectionFactory().createConnection();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    Queue queue = session.createQueue(dataQueue);
    QueueBrowser browser = session.createBrowser(queue);
}
aoyhnmkz

aoyhnmkz1#

ActiveMQ 5.x默认情况下按需创建队列,因此您可能已经更改了默认配置以禁止此操作,在这种情况下,如果您遇到不存在的队列,则应该预期会发生错误,您应该检查并处理该错误。如果您需要确定,那么代理提供了一个JMX接口来查询有关代理统计信息等。还有其他的监控方式,比如在Jolokia管理界面上使用Rest风格的调用。

cgvd09ve

cgvd09ve2#

我用这个解决了:

public boolean existDataQueue(String dataQueue) throws JMSException {
    boolean response = false;
    ActiveMQConnectionFactory activeMQConnectionFactory =
        new ActiveMQConnectionFactory();
    activeMQConnectionFactory.setBrokerURL(brokerUrl);
    ActiveMQConnection connection = (ActiveMQConnection)activeMQConnectionFactory.createConnection();

    connection.start();

    DestinationSource ds = connection.getDestinationSource();

    Set<ActiveMQQueue> queues = ds.getQueues();

    for (ActiveMQQueue activeMQQueue : queues) {
        try {
            if(activeMQQueue.getQueueName().equalsIgnoreCase(dataQueue)) {
                response = true;
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
    connection.close();
    return response;
}

相关问题