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

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。 版權所有 © 2024,Apache 軟體基金會。 根據 Apache License 2.0 授權。