Как я могу получить список потребителей и потребительский "селектор" из activemq через jmx? - PullRequest
0 голосов
/ 17 мая 2018

Вот мой код, чтобы получить информацию через jmx, из этого кода я могу получить некоторую информацию об ActiveMQ, такую ​​как имя очереди, количество потребителей, но я не знаю, как получить список потребителей одной очереди и получить "селектор" потребителя в изображении?

"селектор" изображение

package controller;

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 org.apache.activemq.broker.jmx.BrokerViewMBean;
import org.apache.activemq.broker.jmx.QueueViewMBean;

public class Monitor {

    public static void main(String[] args) throws Exception {
        String url = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
        JMXServiceURL urls = new JMXServiceURL(url);
        JMXConnector connector = JMXConnectorFactory.connect(urls);
        connector.connect();
        MBeanServerConnection mbsc = connector.getMBeanServerConnection();
        ObjectName objectName = new ObjectName("org.apache.activemq:brokerName=localhost,type=Broker");
        BrokerViewMBean mBean = MBeanServerInvocationHandler.newProxyInstance(mbsc, objectName, BrokerViewMBean.class, true);

        for (ObjectName queueName : mBean.getQueues()) {
            QueueViewMBean queueMBean = MBeanServerInvocationHandler.newProxyInstance(mbsc, queueName, QueueViewMBean.class, true);

        // queue name
        System.out.println("Queue Name:" + queueMBean.getName());

        // consumer count
        System.out.println("Number of Consumers:" + queueMBean.getConsumerCount());

        }
    }

}

1 Ответ

0 голосов
/ 17 мая 2018

Вы можете получить список потребителей (ID), запросив ConnectionViewMBean. Вам нужно передать connectionName, для которого вы хотели бы перечислить всех потребителей. Чтобы получить connectionName, вам нужно обратиться за помощью в JCONSOLE. Каноническое имя объекта для объекта подключения может выглядеть примерно так:

"org.apache.activemq:type=Broker,brokerName=<>,connector=<Connector>,connectorName=<ConnectorName>"

    ConnectionViewMBean connectionView = MBeanServerInvocationHandler.newProxyInstance(mbeanServer, <connectionName>, ConnectionViewMBean.class, true);
    for (ObjectName name : connectionView.getConsumers()) {
        if (name.equals(subscriptionName)) {
            found = true;
        }
    }
...