ActiveMQ通过JMX连接broker
如果通过JMX连接AMQ服务并获取broker信息,需要知道以下几个AMQ服务参数
所在机器IP: amqIp;
jmx端口: jmxPort;
rmi端口: rmiPort;(可选)
jmx用户名:jmxUser;
jmx密码:jmxPassword;
要获取broker信息,还需要知道broker名字:brokerName;
还需要导入activemq-broker的包
- 拼出jmx连接的url
String url =
"service:jmx:rmi://" + amqIp + ":" + rmiPort
+ "/jndi/rmi://" +
amqIp + ":" + jmxUser +
"/jndi/rmi://";
- 创建连接MBeanServerConnection
MBeanServerConnection connection = null;
private static MBeanServerConnection createConn(String url,
String userName, String password) throws IOException {
if (Strings.isNullOrEmpty(url)) {
throw new IllegalArgumentException("url should not be null nor empty");
}
if (Strings.isNullOrEmpty(userName)) {
throw new IllegalArgumentException("userName should not be null nor empty");
}
if (Strings.isNullOrEmpty(password)) {
throw new IllegalArgumentException("password should not be null nor empty");
}
MBeanServerConnection connection = null;
JMXServiceURL jmxServiceURL = null;
try {
jmxServiceURL = new JMXServiceURL(url);
HashMap<String, String[]> aut = new HashMap<>();
String[] credentials = new String[]{
userName, password};
aut.put("jmx.remote.credentials", credentials);
JMXConnector connector = JMXConnectorFactory.connect(jmxServiceURL, aut);
connector.connect();
connection = connector.getMBeanServerConnection();
} catch (IOException e) {
log.error(e.getMessage());
throw e;
}
return connection;
}
- 创建BrokerViewMBean
BrokerViewMBean brokerMBean = null;
ObjectName objectname = new ObjectName(
"org.apache.activemq" + ":brokerName=" + brokerName + ",type=Broker");
brokerMBean =MBeanServerInvocationHandler
.newProxyInstance