我正在尝试创建一个应用程序,它继续检查在activemq中启动和运行的队列数。 以及检查队列是否正常工作的任何方式,即是否已损坏且无法处理消息。 请建议如何做。
先谢谢。
答案 0 :(得分:1)
您可以尝试以下代码。
public static void main(String[] args) throws Exception
{
// get the initial context
InitialContext ctx = new InitialContext();
// lookup the queue object
Queue queue = (Queue) ctx.lookup("queue/queue0");
// lookup the queue connection factory
QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
lookup("queue/connectionFactory");
// create a queue connection
QueueConnection queueConn = connFactory.createQueueConnection();
// create a queue session
QueueSession queueSession = queueConn.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
// create a queue browser
QueueBrowser queueBrowser = queueSession.createBrowser(queue);
// start the connection
queueConn.start();
// browse the messages
Enumeration e = queueBrowser.getEnumeration();
int numMsgs = 0;
// count number of messages
while (e.hasMoreElements()) {
Message message = (Message) e.nextElement();
numMsgs++;
}
System.out.println(queue + " has " + numMsgs + " messages");
// close the queue connection
queueConn.close();
}
答案 1 :(得分:1)
您可以使用代理上的statistics plugin和普通的JMS API来询问统计信息。即要计算FOO.BAR上的消息数,请向ActiveMQ.Statistics.Destination.TEST.FOO
发送一条空消息并指定replyTo标头。在响应消息(典型的MapMessage)中,您可以找到消息计数器。
另一种方法是使用简单的队列浏览器浏览队列的第一条消息(类似于praveen_programmer建议的方式)并检查该消息的时间戳。如果它超过某个阈值,您可能会遇到该消费者的问题。即在最后一小时/分钟/天内没有处理任何消息。
另一种方法是使用JMX,或者最好使用jolokia REST/HTTP management api。
只需使用http查询目标,您就可以获得队列深度: 要在localhost上查询队列“q”,请使用以下api(您需要提供Web控制台的用户/密码): http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=q
答案 2 :(得分:0)
查看咨询消息。您需要在配置中启用它们,但通过简单的JMS消息传递,您可以获得有关当前activemq实例信息的大量有用信息。 http://activemq.apache.org/advisory-message.html我正在使用它们来强调缓慢的生产者和消费者情景。