有人知道如何从Artemis v2.6.x获取所有队列的列表吗?
我试图从下面的一些MBean中检索它们
org.apache.karaf.jmx
,但无法正常运行。
请分享一些可行的解决方案。
答案 0 :(得分:3)
一些重要说明:
org.apache.activemq.artemis
下org.apache.karaf.jmx
下(尽管可以使用broker.xml中的<jmx-domain>
元素进行配置)。 name
(因为多个代理可以在同一个JVM中运行)。可使用broker.xml中的<name>
元素配置此名称。 name
默认为localhost
。如果需要,可以通过在broker.xml中设置name
来将代理<jmx-use-broker-name>false</jmx-use-broker-name>
从MBean的名称中排除。getQueueNames()
:此方法位于ActiveMQServerControl
MBean上,并返回在代理上定义的所有队列的名称的String[]
。getQueueNames(String)
:此方法在ActiveMQServerControl
MBean上,返回在路由类型与输入匹配的代理上定义的所有队列的名称的String[]
。有效输入值为anycast
和multicast
。您可以在Artemis附带的jmx
示例中找到一个MBean客户端访问队列指标的工作示例。您可以在线here查看该示例的代码。
这是一个简单的代码示例,用于从在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 documentation中查看更多详细信息。