Проверка наличия очереди в HornetQ через JMS API

Я хочу проверить, существует ли очередь jms в HornetQ или нет. Я использую API управления jms:

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.


person Arya    schedule 03.09.2014    source источник


Ответы (1)


JMSManagementHelper.putOperationInvocation() следует использовать вместо JMSManagementHelper.putAttribute() с именем ресурса: jms и параметром операции getQueueNames. Результатом этой операции является Object[], который содержит имена всех очередей jms.

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;
}
person Arya    schedule 29.10.2014