我正面临类似的问题,一些细节使所有的差异。
如果您在域模式下运行Wildfly所以你必须连接如下:
HashMap environment = new HashMap();
environment.put(JMXConnector.CREDENTIALS, new String[] { "your_user", "your_password" });
JMXServiceURL url = new JMXServiceURL("service:jmx:http-remoting-jmx://your_host:8080");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url, environment);
MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
注意:请注意,该端口进行远程连接应该是8080,不是9990的另一个重要细节:your_user必须应用程序类型的用户并且不是管理型用户。
你也应该离开设置你的JMX的domain.xml如下:
<subsystem xmlns="urn:jboss:domain:jmx:1.3">
<expose-resolved-model/>
<expose-expression-model/>
<remoting-connector use-management-endpoint="false" />
</subsystem>
如果您在独立模式下必须使用9990端口和身份验证运行Wildfly不是必需的。
一个更详细地,尝试恢复该信息如下:
String queueName = "YourQueue"; // use your queue name jms-queue
String mbeanObjectName = "jboss.as:subsystem=messaging,hornetq-server=default,jms-queue=" + queueName;
ObjectName objectName = ObjectName.getInstance(mbeanObjectName);
JMSQueueControl jmsQueueControl = (JMSQueueControl) MBeanServerInvocationHandler.newProxyInstance(connection, objectName, JMSQueueControl.class, false);
assert jmsQueueControl != null;
long msgCount = jmsQueueControl.countMessages(null);
System.out.println(mbeanObjectName + " message count: " + msgCount);
注意,代替使用密钥“org.hornetq:队列模块= JMS,类型=,名字=”我使用的“的JBoss 。如:子系统=消息,将hornetq-服务器=默认,JMS队列=”。
理想情况下,使用jconsole验证您的密钥的确切名称。