// jmx服务地址,注意端口
static String jmxServiceURL = "service:jmx:rmi:///jndi/rmi://172.21.201.93:11099/jmxrmi";
// brokerName和type的首字母要小写,大写会报错。brokerName要跟配置文件里的一样。
static String objectName = "org.apache.activemq:brokerName=localhost,type=Broker";
public ArrayList<HashMap<String, Object>> show() throws Exception {
JMXServiceURL url = new JMXServiceURL(jmxServiceURL);
JMXConnector connector = JMXConnectorFactory.connect(url, null);
connector.connect();
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName name = new ObjectName(objectName);
BrokerViewMBean mBean = MBeanServerInvocationHandler.newProxyInstance(connection, name, BrokerViewMBean.class,
true);
for (ObjectName queueName : mBean.getQueues()) {
System.out.println("----");
QueueViewMBean queueMBean = (QueueViewMBean) MBeanServerInvocationHandler.newProxyInstance(connection,
queueName, QueueViewMBean.class, true);
System.out.println("*******************************");
System.out.println("消息队列名称:" + queueMBean.getName());
System.out.println("队列中剩余的消息数:" + queueMBean.getQueueSize());
System.out.println("消费者数:" + queueMBean.getConsumerCount());
System.out.println("出队列数:" + queueMBean.getDequeueCount());
}
}
index.jsp 页面展示,柱状图
<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));
var url = '${pageContext.request.contextPath}/ShowData';
$.getJSON(url).done(function(json) {
// 2.获取数据
salesVolume = json.salesVolume;//销量
bussinessVolume = json.bussinessVolume;//营业额
months = json.months;//月份
var xAxisDataList = [];
var newsDataList = [];
var consumerList = [];
json.forEach(function(val, idx){
xAxisDataList.push(val.queueName);
newsDataList.push(val.queueSize);
consumerList.push(val.consumerCount);
});
console.log(newsDataList);
var option = {
title : {
text: 'ActiveMQ数据',
subtext: 'JMX监控'
},
tooltip : {
trigger: 'axis'
},
legend: {
data:['剩余消息数','消费者数']
},
toolbox: {
show : true,
feature : {
/* dataView : {show: true, readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore : {show: true}, */
saveAsImage : {show: true}
}
},
calculable : true,
xAxis : [
{
type : 'category',
data: xAxisDataList
}
],
yAxis : [
{
type : 'value'
}
],
series : [
{
name:'剩余消息数',
type:'bar',
data: newsDataList
},
{
name:'消费者数',
type:'bar',
data: consumerList
}
]
};
myChart.setOption(option);
})
</script>