Py学习  »  MQ

尝试获取activemq mbean时发生instancentfoundexception

ba3a • 4 年前 • 720 次点击  

我有以下配置:

@Configuration
public class ConfigureRMI {
    @Value("${jmx.rmi.host:localhost}")
    private String rmiHost;

    @Value("${jmx.rmi.port:1099}")
    private Integer rmiPort;

    @Bean
    public RmiRegistryFactoryBean rmiRegistry() {
        final RmiRegistryFactoryBean rmiRegistryFactoryBean = new RmiRegistryFactoryBean();
        rmiRegistryFactoryBean.setPort(rmiPort);
        rmiRegistryFactoryBean.setAlwaysCreate(true);
        return rmiRegistryFactoryBean;
    }

    @Bean
    @DependsOn("rmiRegistry")
    public ConnectorServerFactoryBean connectorServerFactoryBean() throws Exception {
        final ConnectorServerFactoryBean connectorServerFactoryBean = new ConnectorServerFactoryBean();
        connectorServerFactoryBean.setObjectName("connector:name=rmi");
        connectorServerFactoryBean.setServiceUrl(String.format("service:jmx:rmi://%s:%s/jndi/rmi://%s:%s/jmxrmi", rmiHost, rmiPort, rmiHost, rmiPort));
    return connectorServerFactoryBean;
    }

    @Bean
    @DependsOn("connectorServerFactoryBean")
    public DestinationViewMBean queueMonitor() {

        JMXConnectorServer connector = null;
        MBeanServerConnection connection;
        ObjectName nameConsumers;
        try {
            connector = connectorServerFactoryBean().getObject();
            connection = connector.getMBeanServer();
            nameConsumers = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=tasks");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        DestinationViewMBean mbView = MBeanServerInvocationHandler.newProxyInstance(connection, nameConsumers, DestinationViewMBean.class, true);
        return mbView;
    }
}

它配置并实例化了DestinationViewMBean,我稍后将尝试在如下代码中使用它:

Long queueSize = queueMonitor.getQueueSize();

但它引发了一个例外 javax.management.InstanceNotFoundException: org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=tasks 我肯定名字和我打的一样。我能看到布洛克的名字 tasks 在ActiveMQ web控制台中,元素按预期排队和出列但我不能监视队列大小我使用的方法(我提供的方法)是根据so上的许多答案以及jmx和activemq上的手册页得出的。

我想知道我是否遗漏了一些显而易见的东西。我关闭了防火墙,我在本地主机上为什么DestinationViewmbean找不到队列?

UPD:我用JConsole检查MBean名称我设法修复了instancentfoundexception,但现在无法从bean中获取任何属性。我在Debugger中尝试了很多(只需运行我可以在中找到的属性 DestinationViewMBean 接口)。但每次尝试属性获取器时 javax.management.AttributeNotFoundException: getAttribute failed: ModelMBeanAttributeInfo not found for QueueSize (或任何其他属性)。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48523
 
720 次点击