Java 是否可以获取远程代理上的队列列表?

Java 是否可以获取远程代理上的队列列表?,java,activemq,Java,Activemq,我正试图找出如何获取远程代理上现有队列的列表 看起来我可以通过添加一条建议消息(我还没有收到该消息)来监听队列的创建/销毁过程,但我需要在启动时获取所有现有队列 看起来我可以用getDestinationMap实现这一点: 但这似乎只能从嵌入式进程内代理调用 我是说。。。我愿意走这条路,但似乎更合理的做法是为activemq设置正常的init/守护进程,然后让远程进程像普通JMS使用者一样连接到它 本文档似乎暗示有可能: 但这是通过使用Region对象实现的,只有当您与activemq位于同

我正试图找出如何获取远程代理上现有队列的列表

看起来我可以通过添加一条建议消息(我还没有收到该消息)来监听队列的创建/销毁过程,但我需要在启动时获取所有现有队列

看起来我可以用getDestinationMap实现这一点:

但这似乎只能从嵌入式进程内代理调用

我是说。。。我愿意走这条路,但似乎更合理的做法是为activemq设置正常的init/守护进程,然后让远程进程像普通JMS使用者一样连接到它

本文档似乎暗示有可能:

但这是通过使用Region对象实现的,只有当您与activemq位于同一JVM中时,这才可能实现。

请参见以下答案:

如果您在Java中执行此操作,那么DestinationSource类将提供帮助:

创建连接并使用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();
    }
}
DestinationSource ds=connection.getDestinationSource();
Set queues=ds.getQueues();
for(ActiveMQQueue队列:队列){
试一试{
System.out.println(queue.getQueueName());
}捕获(JME){
e、 printStackTrace();
}
}
//创建连接工厂
ActiveMQConnectionFactory connectionFactory=新的ActiveMQConnectionFactory(“tcp://localhost:61616");
//创建连接
ActiveMQConnection连接=(ActiveMQConnection)connectionFactory.createConnection();
//上述答案中遗漏的要点
connection.start();
DestinationSource ds=connection.getDestinationSource();
Set queues=ds.getQueues();
for(ActiveMQQueue队列:队列){
试一试{
System.out.println(queue.getQueueName());
}捕获(JME){
e、 printStackTrace();
}
}

wow。。迷人的。我使用的是5.9.1,但该方法不存在。。。实际上有get Topic()但没有getQueues()。。我有罪。就在那里。我想这只是一个intellij bug。好吧。。所以方法就在那里。。但是代码不起作用。此paste bin()返回零队列……要使其工作,您必须在客户端和代理上都启用咨询支持。@TimBish咨询功能在默认情况下是启用的,不是吗?这应该是答案,
connection.start()是使其工作的关键;DR:确保将连接强制转换为
(ActiveMQConnection)
    // 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();
    }
}