【问题标题】:Get JMS Queue ObjectName on Wildfly在 Wildfly 上获取 JMS 队列 ObjectName
【发布时间】:2015-12-01 09:58:40
【问题描述】:

我想获取队列中的对象数量。这是我找到的代码:

MBeanServerConnection mbeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName queueName = ObjectNameBuilder.DEFAULT.getJMSQueueObjectName(queue.getQueueName());
Integer messageCount = (Integer) mbeanServer.getAttribute(queueName, "MessageCount");

这段代码有问题。首先,wildfly 上没有ObjectNameBuilder 类(是否需要任何模块!?)。

使用HornetQ ObjectNameBuilder类源码后,我自己实现了功能,但现在报这个错误:

org.hornetq:module=JMS,type=Queue,name="MyQueueName"

我正在使用Wildfly v9.0.1-Final。有什么建议吗?

【问题讨论】:

    标签: jakarta-ee jboss jms wildfly mbeans


    【解决方案1】:

    我也遇到了类似的问题,但一些细节决定了一切。

    如果您在域模式下运行 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>
    

    如果您在独立模式下运行 Wildfly,则必须使用 9990 端口并且不需要身份验证。

    再详细一点,尝试恢复信息如下:

    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:module=JMS,type=Queue,name=”键,而是使用“jboss.as:subsystem=messaging,hornetq-server=default,jms-queue=”。

    理想情况下,使用 jconsole 来验证您的密钥的确切名称。

    【讨论】:

      猜你喜欢
      • 2015-04-02
      • 2018-04-20
      • 2021-10-16
      • 2018-04-07
      • 2011-01-08
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      相关资源
      最近更新 更多