2014-06-13 7 views
5

Ich versuche herauszufinden, wie Sie eine Liste der vorhandenen Warteschlangen auf einem Remote-Broker erhalten.Ist es möglich, eine Liste von Warteschlangen auf einem Remote-Broker zu erhalten?

Es sieht so aus, als ob ich Warteschlangen hören kann, wie sie erstellt/zerstört werden, indem ich eine beratende Nachricht hinzufüge (die ich noch nicht funktioniere), aber ich muss alle EXISTING Queues beim Start bekommen.

Es sieht aus wie ich dies mit getDestinationMap tun kann:

http://activemq.apache.org/maven/apidocs/org/apache/activemq/broker/region/Region.html#getDestinationMap()

Aber das scheint, wie es nur von einem eingebetteten und In-Process-Broker aufgerufen werden kann.

Ich meine ... Ich bin bereit, diese Route zu gehen, aber es scheint sinnvoller zu sein, nur die normalen init/Daemon-Setup für activemq und dann einen Remote-Prozess verbinden wie ein normaler JMS-Consumer.

Diese Dokumentation scheint zu implizieren, dass es möglich ist:

http://activemq.apache.org/how-can-i-see-what-destinations-are-used.html

Aber das ist durch eine Region-Objekt und das scheint nur möglich, wenn Sie in der gleichen JVM wie activemq sind.

Antwort

2

Siehe diese Antwort: https://stackoverflow.com/a/14021722/3735747

Wenn Sie tun dies in Java gibt es die DestinationSource Klasse, die helfen: http://activemq.apache.org/maven/5.7.0/activemq-core/apidocs/org/apache/activemq/advisory/DestinationSource.html

eine Verbindung erstellen und die ActiveMQConnection Typ anstelle des JMS-Verbindungstyp.

// Create a ConnectionFactory 
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 

// Create a Connection 
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory.createConnection(); 

Sobald Sie verbunden sind, können Sie ein DestinationSource-Objekt erstellen und die Warteschlangen erhalten:

DestinationSource ds = connection.getDestinationSource(); 
Set<ActiveMQQueue> queues = ds.getQueues(); 

for(ActiveMQQueue queue : queues){ 
    try { 
     System.out.println(queue.getQueueName()); 
    } catch (JMSException e) { 
     e.printStackTrace(); 
    } 
} 
+0

wow .. faszinierend. Ich bin auf 5.9.1 und diese Methode ist nicht da ... es gibt Topic(), aber keine getQueues() – burtonator

+0

Eigentlich .. mea culpa. Es ist da. Ich denke, das war nur ein Intellij-Bug. – burtonator

+1

ok .. also die Methode ist da .. aber der Code funktioniert nicht. Dieser Einfügebehälter (http://pastebin.com/BCjfSGyc) gibt null Warteschlangen zurück. – burtonator

1
// 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(); 
    } 
}