java - 通过 JMS API 检查 HornetQ 中是否存在队列

标签 java jms hornetq

我想检查HornetQ中是否存在jms队列。我正在使用 jms 管理 api:

public boolean queueExists(String queueName) throws Exception 
{
    final Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
    Connection connection = jmsConnectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    QueueRequestor requestor = new QueueRequestor((QueueSession) session, managementQueue);
    connection.start();
    Message message = session.createMessage();
    JMSManagementHelper.putAttribute(message, queueName, ???);
    Message reply = requestor.request(message);
    Object result = JMSManagementHelper.getResult(reply);
    //??? 
}

我的问题是为此目的我应该在请求消息中放入哪个属性?我在哪里可以找到所有可能的属性(文档或类的常量字段)?

JMSManagementHelper.putAttribute(message, queueName, ???);

我该如何处理回复消息的结果来了解请求结果?

Message reply = requestor.request(message);
Object result = JMSManagementHelper.getResult(reply);
//??? 

我正在使用 HornetQ 2.4.1.Final。

最佳答案

必须使用 JMSManagementHelper.putOperationInitation() 代替 JMSManagementHelper.putAttribute(),资源名称为:jms ,操作参数为 getQueueNames。此操作的结果是一个包含所有 jms 队列名称的 Object[]。

public boolean queueExists(String queueName) throws Exception 
{
    final Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
    Connection connection = jmsConnectionFactory.createConnection();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    QueueRequestor requestor = new QueueRequestor((QueueSession) session, managementQueue);
    connection.start();
    Message message = session.createMessage();
    JMSManagementHelper.putOperationInvocation(message,
       org.hornetq.api.core.management.ResourceNames.JMS_SERVER, "getQueueNames");
    Message reply = requestor.request(message);
    Object result = JMSManagementHelper.getResult(reply);
    Object[] results = (Object[])result;
    for (int i = 0; i < results.length; i++)  
    {  
        if (queueName.equals(((String)results[i])))  
            return true;  
    }
    return false;
}

关于java - 通过 JMS API 检查 HornetQ 中是否存在队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25642871/

相关文章:

JMS 具有强制可扩展性(Active-Active-...-Active)和排序?

java - 来自 UNIX 的关闭 Hook

java - 如何在 Spring Boot 应用程序启动时启动 H2 TCP 服务器?

jms - 通过 Internet 向 ActiveMQ 发送消息

websocket - 在 Wildfly 9 中通过 websocket 配置 STOMP

java - 将 HornetQ(2.2.x) 与 Spring 3.1 集成

java - 带有 HornetQ 的 JBoss 7 中 JMS 队列的 'durable' 属性的含义是什么?

java - JPA : how to manage id (or business-id) ? 仍然是相同的 pb of equals/hashcode

java - 使用 PreparedStatement 模板问题

java - 如何检查activemq中是否创建了临时队列?