StatisticsPlugin
功能 > 攔截器 > StatisticsPlugin
從 ActiveMQ Classic 5.3 開始,包含了一個統計外掛程式,可用於從訊息代理程式或其目的地檢索統計資訊。請注意,訊息必須包含一個 replyTo
標頭(如果您使用 JMS,則為 jmsReplyTo
標頭),否則訊息將被忽略。 replyTo
標頭必須包含您要從中檢索統計訊息的目的地名稱。統計訊息是一個 MapMessage
,其中填充了目標(即訊息代理程式或目的地)的統計資訊。
要檢索訊息代理程式的統計資訊,只需將一個空訊息連同 replyTo
標頭發送到名為 ActiveMQ.Statistics.Broker
的目的地即可。要檢索目的地的統計資訊,只需將一個空訊息連同 replyTo
標頭發送到名為 ActiveMQ.Statistics.Destination.<目的地名稱>
或 ActiveMQ.Statistics.Destination.<萬用字元運算式>
的目的地即可。如果多個目的地與給定的萬用字元運算式匹配,則會將每個目的地的統計訊息發送到 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 開始,您還可以檢索所有佇列和主題訂閱的統計資訊。您只需將一個空訊息連同 replyTo
標頭發送到名為 ActiveMQ.Statistics. Subscription
的目的地即可。回應將以一個或多個訊息的形式出現,每個訊息都包含訊息代理程式上正好一個訂閱的統計資訊。
以下是如何使用統計外掛程式從訊息代理程式抓取統計資訊的範例
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