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



知道如何从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>元素进行配置。默认情况下,namelocalhost。如果需要,可以通过在broker.xml中设置<jmx-use-broker-name>false</jmx-use-broker-name>将代理name从MBean的名称中排除
  • 有几种方法可以从代理获取队列名称:
    • getQueueNames():此方法位于ActiveMQServerControlMBean上,并返回在broker上定义的所有队列的名称的String[]
    • getQueueNames(String):此方法位于ActiveMQServerControlMBean上,并返回路由类型与输入匹配的代理上定义的所有队列的名称的String[]。有效的输入值是CCD_ 17&CCD_ 18
    • ActiveMQServerControl的API文档

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

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

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管理文档中的更多详细信息。

最新更新