我正在试图找出如何获取远程代理上的现有队列列表。
看起来我可以通过添加咨询消息(我还没有工作)来创建/销毁队列来监听队列,但我需要在启动时获得所有现有队列。
看起来我可以使用getDestinationMap执行此操作:
但这似乎只能从嵌入式和进程内代理调用。
我的意思是......我愿意走这条路,但似乎更有意义的是为activemq设置正常的init / daemon,然后让远程进程像普通的JMS使用者一样连接到它。 / p>
此文档似乎暗示可能:
http://activemq.apache.org/how-can-i-see-what-destinations-are-used.html
但是这是通过使用Region对象来实现的,只有当你和activemq在同一个JVM中时才有可能。
答案 0 :(得分:7)
// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// Create a Connection
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection();
//Important point that was missed in the above answer
connection.start();
DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();
for(ActiveMQQueue queue : queues){
try {
System.out.println(queue.getQueueName());
} catch (JMSException e) {
e.printStackTrace();
}
}
答案 1 :(得分:2)
请参阅此答案:https://stackoverflow.com/a/14021722/3735747
如果您是在Java中执行此操作,那么可以使用DestinationSource类:http://activemq.apache.org/maven/5.7.0/activemq-core/apidocs/org/apache/activemq/advisory/DestinationSource.html
创建连接并使用ActiveMQConnection类型而不是JMS连接类型。
// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// Create a Connection
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection();
连接后,您可以创建DestinationSource对象并获取队列:
DestinationSource ds = connection.getDestinationSource();
Set<ActiveMQQueue> queues = ds.getQueues();
for(ActiveMQQueue queue : queues){
try {
System.out.println(queue.getQueueName());
} catch (JMSException e) {
e.printStackTrace();
}
}