社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  MQ

尝试获取activemq mbean时发生instancentfoundexception

ba3a • 5 年前 • 802 次点击  

我有以下配置:

@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
 
802 次点击