StatisticsPlugin
功能 > 拦截器 > StatisticsPlugin
从 ActiveMQ Classic 5.3 开始,包含了一个统计插件,可用于从代理或其目标检索统计信息。请注意,消息必须包含一个 replyTo
标头(如果您使用的是 JMS,则为 jmsReplyTo
标头),否则消息将被忽略。 replyTo
标头必须包含要从中检索统计信息消息的目标名称。统计信息消息是一个 MapMessage
,其中包含目标(即代理或目标)的统计信息。
要检索代理的统计信息,只需将空消息发送到名为 ActiveMQ.Statistics.Broker
的目标,并附带一个 replyTo
标头。要检索目标的统计信息,只需将空消息发送到名为 ActiveMQ.Statistics.Destination.<destination-name>
或 ActiveMQ.Statistics.Destination.<wildcard-expression>
的目标,并附带一个 replyTo
标头。如果多个目标匹配给定的通配符表达式,则会将每个目标的一个统计信息消息发送到 replyTo
目标。
要配置 ActiveMQ Classic 以使用统计插件,只需将以下内容添加到 ActiveMQ Classic XML 配置中
<broker ...>
<plugins>
<statisticsBrokerPlugin/>
</plugins>
</broker>
统计插件查找发送到特定目标的消息。以下是如何使用统计插件从代理获取统计信息的示例
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();
assertNotNull(reply);
for (Enumeration e = reply.getMapNames();e.hasMoreElements();) {
String name = e.nextElement().toString();
System.out.println(name + "=" + reply.getObject(name));
}
上面代码的输出如下所示
vm=vm://127.0.0.1
memoryUsage=0
storeUsage=3330
tempPercentUsage=0
ssl=
openwire=tcp://127.0.0.1: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
类似地,要查询目标的统计信息,只需向目标名称发送消息,该目标名称以 ActiveMQ.Statistics.Destination
为前缀。例如,要检索名为 TEST.FOO 的队列的统计信息,请向名为 ActiveMQ.Statistics.Destination.TEST.FOO
的队列发送空消息。以下是一个示例
Queue replyTo = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(replyTo);
Queue testQueue = session.createQueue("TEST.FOO");
MessageProducer producer = session.createProducer(null);
String queueName = "ActiveMQ.Statistics.Destination." + testQueue.getQueueName()
Queue query = session.createQueue(queueName);
Message msg = session.createMessage();
producer.send(testQueue, msg)
msg.setJMSReplyTo(replyTo);
producer.send(query, msg);
MapMessage reply = (MapMessage) consumer.receive();
assertNotNull(reply);
assertTrue(reply.getMapNames().hasMoreElements());
for (Enumeration e = reply.getMapNames();e.hasMoreElements();) {
String name = e.nextElement().toString();
System.err.println(name + "=" + reply.getObject(name));
}
上面代码的输出如下所示
memoryUsage=0
dequeueCount=0
inflightCount=0
messagesCached=0
averageEnqueueTime=0.0
destinationName=queue://TEST.FOO
size=1
memoryPercentUsage=0
producerCount=0
consumerCount=0
minEnqueueTime=0.0
maxEnqueueTime=0.0
dispatchCount=0
expiredCount=0
enqueueCount=1
memoryLimit=67108864
您也可以在队列名称中使用通配符。这将为每个与通配符匹配的目标生成单独的统计信息消息。非常方便。
订阅统计信息
从 5.6.0 版本开始,您还可以检索所有队列和主题订阅的统计信息。您只需要向名为 ActiveMQ.Statistics. Subscription
的目标发送空消息,并附带一个 replyTo
标头。响应将以一个或多个消息的形式出现,每个消息都包含代理上一个订阅的统计信息。
以下是如何使用统计插件从代理获取统计信息的示例
Queue replyTo = session.createTemporaryQueue();
MessageConsumer consumer = session.createConsumer(replyTo);
String queueName = "ActiveMQ.Statistics.Subscription";
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();
assertNotNull(reply);
for (Enumeration e = reply.getMapNames();e.hasMoreElements();) {
String name = e.nextElement().toString();
System.out.println(name + "=" + reply.getObject(name));
}
上面代码的示例输出如下所示
selector=null
dispatchedQueueSize=1
maximumPendingMessageLimit=0
exclusive=false
connectionId=ID:dejan-bosanacs-macbook-pro-2.local-64989-1335528942875-4:1
destinationName=Test.Queue
clientId=ID:dejan-bosanacs-macbook-pro-2.local-64989-1335528942875-3:1
slowConsumer=false
prefetchSize=1000
sessionId=1
dequeueCounter=0
enqueueCounter=1
retroactive=false
dispatchedCounter=1