JBoss 의 JMS서버의 queue를 모니터링하는 JMX Code입니다. jsp파일로 되어 있으며 복사해서 사용하면 됩니다.
아래의 파일이 실행되어 모니터링되려면 $SERVER_HOME/deploy/jboss-messaging.sar/messaging-service.xml 파일의 다음의 attribute를 true로 바꿔야 합니다.
<attribute name="EnableMessageCounters">true</attribute>
그리고 메시지를 샘플링하는 주기를 적절하게 주면 됩니다.
<attribute name="MessageCounterSamplePeriod">5000</attribute>
<%@
page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="javax.naming.*,
java.util.*,javax.management.*,org.jboss.jms.server.destination.*,org.jboss.jmx.adaptor.rmi.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--meta http-equiv="refresh" content="5"-->
<link href="style.css" rel=stylesheet type="text/css">
<title>Insert title here</title>
</head>
<body leftmargin=15 topmargin=10>
<center><p>
<br>
<table width="600" cellpadding="7" cellspacing="0" border="1" bordercolordark="WHITE" bordercolorlight="BLACK">
<tr bgcolor=#E8EEEC>
<%
String type = "Queue";
Hashtable<String,String> env = new Hashtable<String,String>();
String factory = "org.jboss.security.jndi.JndiLoginInitialContextFactory";
env.put(Context.INITIAL_CONTEXT_FACTORY, factory);
String url = "jnp://127.0.0.1:1099";
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_CREDENTIALS, "admin");
env.put(Context.SECURITY_PRINCIPAL, "admin");
Context ctx = new InitialContext(env);
RMIAdaptor server = (RMIAdaptor) ctx.lookup("jmx/invoker/RMIAdaptor");
%>
<td align center>Queue Name</td>
<td align center>Total Count</td>
<td align center>Current Count</td>
<td align center>Consumer Count</td>
<td align center>Delivering Count</td>
</tr>
<tr>
<td align center>queue/A</td>
<%
String queueName = "A";
// Get the MBeanInfo for the JNDIView MBean
String targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
ObjectName objName = ObjectName.getInstance(targetName);
QueueMBean queueMBean = (QueueMBean)
MBeanServerInvocationHandler.newProxyInstance(server, objName,
QueueMBean.class, false);
int totalMessageCount = 0;
int currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
<tr>
<td align center>queue/B</td>
<%
queueName = "B";
// Get the MBeanInfo for the JNDIView MBean
targetName = "jboss.messaging.destination:service=" + type + ",name=" + queueName;
objName = ObjectName.getInstance(targetName);
queueMBean = (QueueMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, QueueMBean.class, false);
totalMessageCount = 0;
currentMessageCount = 0;
totalMessageCount = queueMBean.getMessageCounter().getCount();
currentMessageCount = queueMBean.getMessageCount();
%>
<td align center><%= totalMessageCount %></td>
<td align center><%= currentMessageCount %></td>
<td align center><%= queueMBean.getConsumerCount() %></td>
<td align center><%= queueMBean.getDeliveringCount() %></td>
</tr>
</table>