2014-06-13 11 views
5

Próbuję dowiedzieć się, jak uzyskać listę istniejących kolejek na zdalnym brokerze.Czy można uzyskać listę kolejek na zdalnym brokerze?

Wygląda na to, że mogę słuchać kolejek podczas ich tworzenia/niszczenia, dodając komunikat doradczy (który jeszcze nie działa), ale muszę uruchomić wszystkie kolejki EXISTING przy starcie.

Wygląda jak mogę to zrobić z getDestinationMap:

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

Ale wydaje się, że to może być wywołana tylko z wbudowanego oraz w procesie broker.

To znaczy ... Jestem gotów pójść tą drogą, ale wydaje się, że bardziej sensowne jest posiadanie zwykłej konfiguracji init/daemon dla ActiveMq, a następnie zdalny proces łączenia się z nią jak normalny konsument JMS.

Dokumentacja ta zdaje się sugerować, że jest to możliwe:

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

Ale to za pomocą obiektu regionie i że wydaje się to możliwe tylko wtedy, gdy jesteś w tej samej JVM jako ActiveMQ.

Odpowiedz

2

Zobacz tę odpowiedź: https://stackoverflow.com/a/14021722/3735747

Jeśli robisz to w Javie, istnieje klasa DestinationSource które pomogą: http://activemq.apache.org/maven/5.7.0/activemq-core/apidocs/org/apache/activemq/advisory/DestinationSource.html

Tworzenie połączenia i użyć typu ActiveMQConnection zamiast typu połączeń JMS.

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

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

Po nawiązaniu, można utworzyć obiekt DestinationSource i uzyskać kolejki:

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 .. fascynujące. Jestem na 5.9.1 i ta metoda nie istnieje ... jest get Topic(), ale nie getQueues() – burtonator

+0

Właściwie .. mea culpa. Jest tutaj. Myślę, że to był po prostu błąd intellij. – burtonator

+1

ok .. więc metoda jest dostępna .. ale kod nie działa. ten wklej bin (http://pastebin.com/BCjfSGyc) zwraca zero kolejek .... – 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(); 
    } 
} 
Powiązane problemy