#java #activemq
#java #activemq
Вопрос:
Я попробовал приведенный ниже код, чтобы получить список очередей в ActiveMQ. Но это не работает. У меня есть 4 очереди в моем ActiveMQ.
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();
}
Пожалуйста, дайте мне знать о любых исправлениях в моем коде или о каком-либо новом коде, чтобы это было сделано.
Комментарии:
1. Какую ошибку и / или вывод вы получаете с этим кодом?
2. Я не получаю никаких ошибок или исключений, и я не получаю никаких выходных данных.
Ответ №1:
Функциональность источника назначения не является гарантированным способом поиска адресатов в брокере. Функциональность может не давать никаких результатов в ряде случаев, например, когда функция консультаций в брокере отключена или клиент настроен на то, чтобы не отслеживать рекомендации. Вы также запрашиваете назначение немедленно, что не обязательно учитывает время, необходимое для отправки рекомендаций клиенту от брокера.
Более надежным механизмом является поддержка JMX в брокере, которая предоставляет методы для получения списков адресатов вместе с множеством другой информации о запущенном экземпляре брокера.
Существует множество статей, показывающих, как использовать JMX с ActiveMQ.
Комментарии:
1. Было бы здорово, если бы вы могли объяснить это, используя какой-нибудь пример кода.
2. Попробуйте поиск в Google, на эту тему уже есть множество статей. Также вы можете посмотреть модульные тесты ActiveMQ для получения примеров использования JMX API.
Ответ №2:
вы должны вызвать 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();
}
Ответ №3:
это сработало для меня
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