如何使用 Java API 检查 JMS 服务器上是否存在队列?我现在不想向队列发送或接收任何数据,只需验证队列是否存在。此外,队列可能是空的。
这是我的代码示例。为了简单起见,我删除了错误处理。
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 的解决方案。
Solution
我遵循了已接受答案中的建议,但创建了一个浏览器。以下行根据需要引发了异常:
QueueBrowser browser = session.createBrowser(queue);
这取决于提供者,但在大多数情况下您不会知道,直到您创建会话类型(例如 session.createConsumer)。简单地以这种方式创建消费者将不会消费任何消息,直到您进行接收为止。正是在这里,行为可能会随着提供商和服务器配置的不同而改变。
例如,对于 ActiveMQ,假设没有权限阻止您正在连接的用户,则在您创建会话类型时会自动创建队列。
对于 WebSphere MQ,队列必须由管理员定义。如果不存在,队列管理器将返回异常,原因代码为 2085 (UNKNOWN_OBJECT_NAME)。
除此之外,您需要查看特定的提供者是否有办法访问队列列表。使用上面的示例,在 ActiveMQ 中,您可以使用 JMX 获取队列列表,而在 WebSphere MQ 中,如果您有权向队列管理器发送 PCF 命令,则可以执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)