最近发现环境出现ActiveMQ经常挂,报错的内存溢出,原因差不多应该是队列里面的消费放的太多,内存设置的比较小,因为这个ActiveMQ只是辅助系统运行的,所以也没怎么在意ActiveMQ的设置相关。
目的
然后想着希望写个程序或者脚本来监控生产的消息条数,当消息条数超过一次的条数就直接清空,然后发现ActiveMQ可以启动JMX,配置JMX之后就可以连接了。
连接代码
注意点
String url = "service:jmx:rmi:///jndi/rmi://192.168.1.134:1099/jmxrmi";
这里需要输入自己ActiveMQ的IP和JMX的端口。
ObjectName name = new ObjectName("org.apache.activemq:brokerName=localhost,type=Broker");
这里的localhost是指当前ActiveMQ的节点名称,不是队列名称,刚开始我输入了的是队列名称,一直报错,brokerName的名字可以在activemq的配置文件里面看,也可以从activemq的控制里面找,如下图。
还有一个问题就是这里的brokerName、type首字母必须小写,
ActiveMQ 5.8.0 Release 这个版本修改了名称
public class MonitorActiveMQ {
public static void main(String[] args) throws Exception {
String url = "service:jmx:rmi:///jndi/rmi://192.168.1.134:1099/jmxrmi";
JMXServiceURL urls = new JMXServiceURL(url);
JMXConnector connector = JMXConnectorFactory.connect(urls, null)