Как проверить, что очередь 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 к администратору очередей.