如何从服务器获取队列列表?

How to get the list of queues from a server?

知道如何从 Artemis v2.6.x 获取所有队列的列表吗? 我试图从下面的一些 MBean 中检索它们 org.apache.karaf.jmx,但它没有像我预期的那样工作。 请分享一些可行的解决方案。

一些重要说明:

  • Artemis MBean 默认在 org.apache.activemq.artemis 下,而不是在 org.apache.karaf.jmx 下(尽管可以使用 broker.xml 中的 <jmx-domain> 元素进行配置)。
  • 默认情况下,MBean 名称包含代理的 name(因为多个代理可以 运行 在同一个 JVM 中)。此名称可使用 broker.xml 中的 <name> 元素进行配置。 name 默认为 localhost。如果需要,可以通过在 broker.xml 中设置 <jmx-use-broker-name>false</jmx-use-broker-name> 将代理 name 从 MBean 的名称中排除。
  • 有几种方法可以从代理获取队列名称:
    • getQueueNames():这个方法是在ActiveMQServerControlMBean和returns一个String[]代理上定义的所有队列的名称。
    • getQueueNames(String):此方法在 ActiveMQServerControl MBean 和 returns 上定义的所有队列名称的 String[] 上,其路由类型匹配的代理输入。有效输入值为 anycast & multicast.
    • API documentation for ActiveMQServerControl.

您可以在 Artemis 附带的 jmx 示例中找到 MBean 客户端访问队列指标的工作示例。您可以在线查看该示例的代码 here

这是一个简单的代码示例,用于从本地主机上的代理 运行ning 获取队列名称:

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 documentation 中查看更多详细信息。