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