我尝试使用下面的代码来获取ActiveMQ中的队列列表。但它不起作用。我的ActiveMQ中有4个队列。
try {
ActiveMQConnection.makeConnection(URL).start();
Set<ActiveMQQueue> allque= ActiveMQConnection.makeConnection().getDestinationSource().getQueues();
Iterator<ActiveMQQueue> itr= allque.iterator();
while(itr.hasNext()){
ActiveMQQueue q= itr.next();
System.out.println(q.getQueueName());
}
} catch (Exception e) {
e.printStackTrace();
}
请让我知道我的代码中的任何更正或一些新代码都可以完成。
答案 0 :(得分:2)
目标源功能不是保证在Broker上查找目标的方法。在许多情况下,该功能可能无法提供任何结果,例如,当Broker上的顾问功能被禁用或客户端已配置为不查看建议时。您还可以立即查询目的地,这不一定允许从经纪商处将建议分派到客户所需的时间。
更可靠的机制是Broker上的JMX support,它提供了获取目的地列表的方法以及有关正在运行的代理实例的大量其他信息。
有很多articles显示如何在ActiveMQ中使用JMX。
答案 1 :(得分:0)
您必须在同一连接上调用 getDestinationSource()。getQueues()
try {
ActiveMQConnection conn = ActiveMQConnection.makeConnection(URL);
conn.start();
Set<ActiveMQQueue> allque= conn.getDestinationSource().getQueues();
Iterator<ActiveMQQueue> itr= allque.iterator();
while(itr.hasNext()){
ActiveMQQueue q= itr.next();
System.out.println(q.getQueueName());
}
} catch (Exception e) {
e.printStackTrace();
}
答案 2 :(得分:0)
这对我有用
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL(brokerUrl);
ActiveMQConnection connection = (ActiveMQConnection) activeMQConnectionFactory.createConnection();
connection.start();
DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();
for (ActiveMQQueue activeMQQueue : queues) {
try {
System.Out.Println(activeMQQueue.getQueueName());
} catch (JMSException e) {
e.printStackTrace();
}
}
connection.close();re