Как получить список очередей с сервера? - PullRequest
0 голосов
/ 11 декабря 2018

Есть идеи, как получить список всех очередей из Artemis v2.6.x?Я пытался получить их из некоторых MBeans под org.apache.karaf.jmx, но это не работает, как я ожидал.Пожалуйста, поделитесь некоторым рабочим решением.

1 Ответ

0 голосов
/ 11 декабря 2018

Несколько важных замечаний:

  • MBean-компоненты Artemis по умолчанию имеют значение org.apache.activemq.artemis, а не org.apache.karaf.jmx (хотя это можно настроить с помощью элемента <jmx-domain> в файле broker.xml).
  • По умолчанию имена MBean включают name брокера (поскольку несколько брокеров могут работать в одной и той же JVM).Это имя можно настроить с помощью элемента <name> в файле broker.xml.name по умолчанию localhost.Посредник name можно исключить из имени MBean, установив <jmx-use-broker-name>false</jmx-use-broker-name> в файле broker.xml, если необходимо.
  • Существует несколько способов получения имен очереди от посредника:
    • getQueueNames(): Этот метод используется в ActiveMQServerControl MBean и возвращает String[] имен всех очередей, определенных в посреднике.
    • getQueueNames(String): Этот метод используется в ActiveMQServerControl MBean и возвращаетString[] имен всех очередей, определенных в посреднике, чей тип маршрутизации совпадает с вводом.Допустимые значения ввода: anycast & multicast.
    • Документация API для ActiveMQServerControl .

Вы можете найти рабочий примерклиента MBean, обращающегося к метрикам очереди в примере jmx, поставляемом с Artemis.Вы можете посмотреть код для этого примера онлайн здесь .

Вот простой пример кода для получения имен очереди от посредника, работающего на localhost:

import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.util.HashMap;

import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;

public class JMXExample {

   public static void main(final String[] args) throws Exception {
      ObjectName on = ObjectNameBuilder.DEFAULT.getActiveMQServerObjectName();
      JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"), new HashMap());
      MBeanServerConnection mbsc = connector.getMBeanServerConnection();
      ActiveMQServerControl serverControl = MBeanServerInvocationHandler.newProxyInstance(mbsc, on, ActiveMQServerControl.class, false);
      for (String queueName : serverControl.getQueueNames()) {
         System.out.println(queueName);
      }
      connector.close();
   }
}

Подробнее см. В документации Artemis Management .

...