我试图创建一个应用程序,它继续检查启动并在activemq中运行的队列数。 和任何方式来检查队列是否正在工作,即如果损坏,无法处理消息。 请建议如何去做。如何计算ACTIVEMQ中的队列数
在此先感谢。
我试图创建一个应用程序,它继续检查启动并在activemq中运行的队列数。 和任何方式来检查队列是否正在工作,即如果损坏,无法处理消息。 请建议如何去做。如何计算ACTIVEMQ中的队列数
在此先感谢。
您可以尝试下面的代码。
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();
}
看看咨询消息。您需要在您的配置中启用它们,但通过简单的JMS消息传递,您可以获得有关当前activemq实例信息的很多有用信息。 http://activemq.apache.org/advisory-message.html我正在使用它们来突出缓慢的生产者和消费者情况。
您可以使用代理和普通JMS API上的statistics plugin来请求统计信息。即要计算FOO.BAR上的消息数,请向ActiveMQ.Statistics.Destination.TEST.FOO
发送空消息并指定replyTo标头。在类型为MapMessage的响应消息中,您可以找到消息计数器。
另一种方法是使用简单队列浏览器(类似于praveen_programmer建议的方式)仅浏览队列的第一条消息并检查该消息的时间戳。如果它超过某个阈值,那么您可能会遇到该消费者的问题。即没有消息在最后一小时/分钟/天处理过。
另一种方法是使用JMX,或者优选使用jolokia REST/HTTP management api。
使用http只需查询目标,你会得到一个队列深度回: 要查询本地主机上的队列“Q”,使用下面的API(你需要为Web控制台提供的用户名/密码): http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=q
请注意,消息浏览器并不总是在队列中提供所有消息。默认情况下,ActiveMQ具有400条消息的浏览限制。所以这个答案不能区分400到100 000个消息。此外,它对于大消息来说非常慢,因为它要求你下载它们全部来计算它们。 –