activeMq消息隊列查詢統計


1. activemq.xml配置統計插件:

<broker>
  <plugins>
    <statisticsBrokerPlugin/>
  </plugins>
</broker>


2. java代碼

public class StatisticsQueueMessageServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private final static Log LOG = Log.getLog(StatisticsQueueMessageServlet.class);

private String brokerURL = "vm://localhost";

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ConnectionFactory :連接工廠,JMS 用它創建連接
ConnectionFactory connectionFactory;
Connection connection;
Session session;
        
        try {
        connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,brokerURL);
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);

StringBuilder builder = new StringBuilder("統計信息爲:\n");
if (request.getParameter("type").equals("broker")) {
processBroker(builder, session);
}else if (request.getParameter("type").equals("destnation")) {
processDestnation(builder,session,request.getParameter("queueName"));
}

session.close();
connection.close();

response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
response.getWriter().print(builder.toString());
response.getWriter().flush();
} catch (JMSException e) {
LOG.error("JMSException : ", e);
} catch (IOException e) {
LOG.error("IOException : ", e);
}
}

private void processDestnation(StringBuilder builder, Session session,String queueName) throws JMSException {
Queue replyTo = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(replyTo);

MessageProducer producer = session.createProducer(null);

Queue destnation = session.createQueue(queueName);
String  queryQueueName = "ActiveMQ.Statistics.Destination." + destnation.getQueueName();
Queue query = session.createQueue(queryQueueName);

Message msg = session.createMessage();
producer.send(destnation, msg);
msg.setJMSReplyTo(replyTo);
producer.send(query, msg);

MapMessage reply = (MapMessage) consumer.receive();
Assert.notNull(reply);
Assert.isTrue(reply.getMapNames().hasMoreElements());

for (Enumeration<?> e = reply.getMapNames();e.hasMoreElements();) {
   String name = e.nextElement().toString();
   builder.append(name+"="+reply.getObject(name)+"\n");
}
}


private void processBroker(StringBuilder builder, Session session) throws JMSException {
Queue replyTo = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(replyTo);

String queueName ="ActiveMQ.Statistics.Broker";
Queue testQueue = session.createQueue(queueName);
MessageProducer producer = session.createProducer(testQueue);

Message msg = session.createMessage();
msg.setJMSReplyTo(replyTo);
producer.send(msg);

MapMessage reply = (MapMessage) consumer.receive();
Assert.notNull(reply);

for(Enumeration<?> e = reply.getMapNames();e.hasMoreElements();) {
String name = e.nextElement().toString();
builder.append(name+"="+reply.getObject(name)+"\n");
}
}

}


3. 統計結果展示:

vm=vm://localhost
memoryUsage=0
storeUsage=3330
tempPercentUsage=0
ssl=
openwire=tcp://localhost:50059
brokerId=ID:bigmac-50057-1253605065511-0:0
consumerCount=2
brokerName=localhost
expiredCount=0
dispatchCount=1
maxEnqueueTime=5.0
storePercentUsage=0
dequeueCount=0
inflightCount=1
messagesCached=0
tempLimit=107374182400
averageEnqueueTime=5.0
stomp+ssl=
memoryPercentUsage=0
size=10
tempUsage=0
producerCount=1
minEnqueueTime=5.0
dataDirectory=/Users/rajdavies/dev/projects/activemq/activemq-core/activemq-data
enqueueCount=10
stomp=
storeLimit=107374182400
memoryLimit=67108864

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章