Несколько важных замечаний:
- 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 .