【问题标题】:Checking if a queue exists in HornetQ via JMS API通过 JMS API 检查 HornetQ 中是否存在队列
【发布时间】:2014-10-27 20:50:50
【问题描述】:

我想检查 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。

【问题讨论】:

    标签: java jms hornetq


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多