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>
크리에이티브 커먼즈 라이센스
http://www.javapattern.info/trackback/203