Как проверить, что очередь JMS существует с помощью Java?

Как я могу проверить, существует ли очередь на сервере JMS с помощью API Java? Пока я не хочу отправлять или получать какие-либо данные в очередь, просто убедитесь, что очередь существует. Кроме того, очередь может быть пустой.

вот мой пример кода. Я удалил обработку ошибок для простоты.

    Connection connection = null;
    Session session = null;
    connection = factory.createConnection();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    //I was hoping this next line would throw an exception if the queue does not exist
    Queue queue = session.createQueue(queueName);

мой сервер JMS-это TIBCO EMS. Я надеялся на решение, которое работает на версиях 5-7.

решение

я последовал рекомендация в принятом ответе, но вместо этого создал браузер. Следующая строка выдала исключение по желанию:

QueueBrowser browser = session.createBrowser(queue);

2 ответов


попробуйте создать потребителя или производителя из сеанса, проходящего в только что созданном объекте очереди:

session.createConsumer(queue);

Это должно вызвать исключение InvalidDestinationException, если очередь (или тема) не существует.


Это зависит от поставщика, но вы не будете знать в большинстве случаев, пока не создадите тип сеанса, такой как сеанс.createConsumer. Просто создание потребителя таким образом не будет потреблять никаких сообщений, пока вы не получите. И именно здесь поведение может меняться от провайдера к провайдеру и конфигурации сервера.

например, с ActiveMQ, предполагая, что нет никаких разрешений, блокирующих пользователя, с которым вы соединяетесь, очередь создается автоматически, когда вы создаете тип сеанса.

в WebSphere MQ очередь должна определяться администратором. Если он не существует, администратор очередей вернет исключение с кодом причины 2085 (UNKNOWN_OBJECT_NAME).

вне этого вам нужно будет увидеть, есть ли у конкретного поставщика способ доступа к списку очередей. Используя приведенные выше примеры, ActiveMQ вы можете получить список очередей с помощью JMX, с помощью WebSphere MQ, вы можете сделать это, если у вас есть разрешения на отправку команд PCF к администратору очередей.