Java ActiveMQ:通过JMX获取连接列表?
如何获取ActiveMQ的OpenWire连接器的连接列表? JConsole可以列出连接,但我看不出可以使用哪个“视图”来获取列表: 连接的ObjectName示例:Java ActiveMQ:通过JMX获取连接列表?,java,activemq,jmx,Java,Activemq,Jmx,如何获取ActiveMQ的OpenWire连接器的连接列表? JConsole可以列出连接,但我看不出可以使用哪个“视图”来获取列表: 连接的ObjectName示例: org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=toto 我尝试了“ConnectorViewMBean”,但其上的操作不允许我列出连接: ObjectName name=newobjectnam
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire,Connection=toto
我尝试了“ConnectorViewMBean”,但其上的操作不允许我列出连接:
ObjectName name=newobjectname(“org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=openwire”);
mbsc.getMBeanInfo(名称);
ConnectorViewMBean视图=JMX.newMBeanProxy(mbsc,名称,ConnectorViewMBean.class);
解决方案是使用一个表达式:
ObjectName connectionNames =
new ObjectName("org.apache.activemq:BrokerName=localhost," +
"Type=Connection,ConnectorName=openwire,Connection=*");
Set<ObjectName> names = mbsc.queryNames(connectionNames, null);
for(ObjectName name : names) {
logger.error("Name: "+name.getCanonicalName());
}
ObjectName connectionNames=
新的ObjectName(“org.apache.activemq:BrokerName=localhost,”+
“类型=连接,连接名=openwire,连接=*”;
Set names=mbsc.queryNames(connectionNames,null);
对于(ObjectName:names){
logger.error(“Name:+Name.getCanonicalName());
}
我正在使用ActiveMQ 5.14.5,它使用不同的ObjectName格式通过JMX查询连接。此版本的ActiveMQ中的等效项为:
final JMXServiceURL=newjmxserviceurl(“服务:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
最终的JMXConnector连接器=JMXConnectorFactory.connect(url,null);
connector.connect();
最终ObjectName connectionName=新ObjectName(
org.apache.activemq:type=Broker+
brokerName=localhost+
连接器=客户端连接器+
connectorName=openwire+
connectionViewType=clientId+
“connectionName=*”
);
最终MBeanServerConnection mbsc=connector.getMBeanServerConnection();
最终集合名称=mbsc.queryNames(connectionName,null);
for(最终对象名称:名称){
System.out.println(name.getCanonicalName());
}
在最新版本的ActiveMQ(5.1x.x)中,您可以使用获取传输连接器的映射:
Map<String, String[]> env = new HashMap<>();
String[] creds = {brokerUsername, brokerPassword};
env.put(JMXConnector.CREDENTIALS, creds);
final String managementURL = "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
try (JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(managementURL, env)) {
ObjectName on = new ObjectName("org.apache.activemq:type=Broker,brokerName=localhost");
BrokerViewMBean broker = MBeanServerInvocationHandler.newProxyInstance(connector.getMBeanServerConnection(), on, BrokerViewMBean.class, false);
Map<String, String> transportConnectors = broker.getTransportConnectors();
// broker.getTransportConnectorsByType("tcp"); // openwire
// broker.addConnector(String discoveryAddress);
// broker.removeConnector(String connectorName);
} catch (MalformedObjectNameException ex) {
// log error
} catch (IOException ex) {
// log error
} catch (Exception ex) {
// log error
}
Map env=new HashMap();
字符串[]creds={brokerUsername,brokerPassword};
环境put(JMXConnector.CREDENTIALS、creds);
最后一个字符串managementURL=“服务:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi";
try(JMXConnector connector=JMXConnectorFactory.connect(新的JMXServiceURL(managementURL,env)){
ObjectName on=newobjectname(“org.apache.activemq:type=Broker,brokerName=localhost”);
BrokerViewBean broker=MBeanServerInvocationHandler.newProxyInstance(connector.getMBeanServerConnection(),on,brokerViewBean.class,false);
Map transportConnectors=broker.getTransportConnectors();
//getTransportConnectorsByType(“tcp”);//openwire
//addConnector(字符串发现地址);
//removeConnector(字符串connectorName);
}捕获(格式错误的ObjectNameException ex){
//日志错误
}捕获(IOEX异常){
//日志错误
}捕获(例外情况除外){
//日志错误
}
也看看
然而,尽管在
BrokerViewMBean
中有一些方法可以获取传输连接器,如上面的代码所示,但是没有任何方法可以获取网络列表(也称为代理到代理)连接器。有人能告诉我如何正确设置代码格式吗?SHIFT+ENTER会创建一个新的块代码,也可以输入…请参阅或使用编辑器中的工具栏按钮。此答案对于ActiveMQ 5.7.0及之前的版本是正确的。ActiveMQ 5.8.0中更改了ObjectName的格式,如中所述。