如何从服务器获取队列列表?
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()
:这个方法是在ActiveMQServerControl
MBean和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 中查看更多详细信息。
知道如何从 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()
:这个方法是在ActiveMQServerControl
MBean和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 中查看更多详细信息。