我有以下配置:
@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
(或任何其他属性)。