2014-09-03 66 views
0

我想檢查HornetQ中是否存在jms隊列。我使用JMS管理接口:通過JMS API檢查HornetQ中是否存在隊列

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。

回答

1

必須使用JMSManagementHelper.putOperationInvocation()而不是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; 
}