1.运行一个代理,将代理属性 useJmx 设置为 true ,并将连接物 createConnector 设置为 true ,connectorPort 设置为 要代理的端口号
# conf/activemq.xml
...
# conf/activemq.xml
2.设置账号密码
# 如果未设置密码,将无法开启远程连接,如下将注释打开即可
# conf/jmx.access
...
admin readwrite
monitorRole readonly
controlRole readwrite
...
# conf/jmx.password
...
admin activemq
monitorRole abc123
controlRole abcd1234
...
# bin/env
...
# ---
#
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 "
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
# ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
#ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 "
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote"
ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Djava.rmi.server.hostname=192.168.31.65"
...
3.设置拥有者可读写,其他人不可读写执行
chmod 600 conf/jmx.*
4.重新启动
bin/activemq restart
bin/activemq start
bin/activemq stop
#如果存在即开启成功
netstat -an |grep 11099
cjmx
java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select BrokerName"
example
org.apache.activemq:type=Broker&brokerName=localhost
------------------------------
BrokerName = localhost
cjmx
java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select *"
example
java.lang:type=OperatingSystem
------------------------------
BrokerName = localhost
...
cjmx
java -cp $JAVA_HOME/lib/tools.jar:cjmx_2.12-2.8.1-app.jar cjmx.Main "remote-connect 127.0.0.1:11099" "mbeans 'org.apache.activemq:type=Broker&brokerName=localhost' select *" |grep BrokerName|cut -f 4 -w
example
localhost
Node /index.js
const { exec } = require("child_process");
let jmx_jar = 'cjmx_2.12-2.8.1-app.jar';
let java_cmd = 'java -cp $JAVA_HOME/lib/tools.jar:' + jmx_jar + ' cjmx.Main ';
let kafka_jmx_url = '127.0.0.1:9999';
let username = '';
let password = '';
let jmx_remoteConnect = 'remote-connect ' + kafka_jmx_url;
let jmx_cmd = username ? `${java_cmd} "${jmx_remoteConnect} ${username}"` : `${java_cmd} "${jmx_remoteConnect}"` ;
let mbeans = "mbeans 'kafka.controller:name=LeaderElectionRateAndTimeMs,type=ControllerStats' select OneMinuteRate";
let child = exec(`${jmx_cmd} "${mbeans}"`,null, (err, stdout, stderr) => {
if(err){
console.error(err)
} else if(stdout) {
console.log(stdout.split('\n'))
}
})
if(username) {
child.stdin.write(password+'\n');
child.stdin.end();
}
// let grep = "|grep OneMinuteRate|cut -f 4 -w"
// exec(`${jmx_cmd} "${mbeans}" ${grep}`,null, (err, stdout, stderr) => {
// if(err){
// console.error(err)
// } else if(stdout) {
// console.log(stdout)
// }
// })