【问题标题】:How do I verify that a JMS queue exists using Java?如何使用 Java 验证 JMS 队列是否存在?
【发布时间】:2014-12-03 07:35:52
【问题描述】:

如何使用 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 的解决方案。

解决方案

我遵循了已接受答案中的建议,但创建了一个浏览器。以下行根据需要引发了异常:

QueueBrowser browser = session.createBrowser(queue);

【问题讨论】:

  • JMS 没有定义管理接口或模型;因此,这个问题的答案取决于您的 JMS 提供商。你用的是哪一个?

标签: java jms


【解决方案1】:

尝试通过传入刚刚创建的队列对象的 Session 创建消费者或生产者:

session.createConsumer(queue);

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

【讨论】:

    【解决方案2】:

    这取决于提供者,但在大多数情况下,您在创建会话类型之前不会知道,例如 session.createConsumer。以这种方式简单地创建消费者不会消耗任何消息,直到您进行接收。正是在这里,行为可能会从提供者到提供者以及服务器的配置发生变化。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 2014-10-27
      • 2015-11-29
      • 2019-05-07
      • 2012-06-13
      • 2014-11-18
      • 2021-05-15
      • 1970-01-01
      • 2014-09-16
      相关资源
      最近更新 更多