如何使用JavavalidationJMS队列是否存在?

如何使用Java API检查JMS服务器上是否存在队列? 我现在不想向队列发送或接收任何数据,只需validation队列是否存在。 此外,队列可能是空的。

这是我的代码示例。 为简单起见,我删除了error handling。

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版本的解决方案。

我按照接受的答案中的建议,但创建了一个浏览器。 以下行根据需要引发了exception:

 QueueBrowser browser = session.createBrowser(queue); 

尝试在会话中创建一个消费者或生产者,传递您刚刚创建的队列对象:

 session.createConsumer(queue); 

如果队列(或主题)不存在,则应抛出InvalidDestinationException。

这取决于提供程序,但在大多数情况下,您不会知道,直到创建会话类型,例如session.createConsumer。 以这种方式创建消费者只会在您收到消息之前不会消费任何消息。 在这里,行为可能会从提供商变为提供商和服务器的配置。

例如,对于ActiveMQ,假设没有权限阻止您要连接的用户,则在创建会话类型时会自动创建队列。

使用WebSphere MQ,队列必须由管理员定义。 如果它不存在,队列管理器将返回原因代码为2085(UNKNOWN_OBJECT_NAME)的exception。

除此之外,您还需要查看特定提供商是否有办法访问队列列表。 使用上面的示例,ActiveMQ可以使用JMX获取队列列表,使用WebSphere MQ,如果您有权将PCF命令发送到队列管理器,则可以执行此操作。