28.6. メッセージカウンター

メッセージカウンターは、HornetQ がキューメトリックスの履歴を保持する場合にキューに関する一定の時間の情報を取得するために使用できます。
これらは、キューのトレンドを示すために使用できます。たとえば、管理 API を使用する場合は、キュー内のメッセージの数を一定の間隔で問い合わせることができます。また、JMX コンソールを使用してこの情報を参照したり、コア API (org.hornetq.api.core.management.MessageCounterInfo) を使用してこの情報を抽出したりできます。
ただし、キューが使用される場合は、これで十分ではありません。誰もキューに対してメッセージを送受信しないため、またはキューに送信されるメッセージの数がキューから消費されるメッセージの数と同じであるため、メッセージの数は、一定になることがあります。両方のケースでキュー内のメッセージの数は、同じになりますが、その使用は異なります。
メッセージカウンターは、キューに関する追加情報を提供します。
count
サーバーが起動された以降にキューに追加されたメッセージの合計数。
countDelta
最後のメッセージカウンターが更新された以降にキューに追加されたメッセージの数。
depth
キュー内にあるメッセージの現在の数。
depthDelta
最後のメッセージカウンターが更新された以降にキューに対して追加または削除されたメッセージの合計数。たとえば、depthDelta-10 に等しい場合、合計で 10 個のメッセージがキューから削除されたことを意味します。
lastAddTimestamp
メッセージが最後にキューに追加されたときのタイムスタンプ。
udpateTimestamp
最後のメッセージカウンター更新のタイムスタンプ。

28.6.1. メッセージカウンターの設定

メッセージカウンターは、メモリーに悪い影響を与えることがあるため、デフォルトで無効になります。
メッセージカウンターを無効にするには、JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml でメッセージカウンターを true に設定します。
<message-counter-enabled>true</message-counter-enabled>
メッセージカウンターは、キューメトリックスの履歴 (デフォルトで 10 日間) を保持し、すべてのキューを一定の間隔 (デフォルトで 10 秒間) でサンプリングします。メッセージカウンターが有効な場合、これらの値は JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml のメッセージング使用ケースを満たすように設定する必要があります。
<!-- keep history for a week -->
<message-counter-max-day-history>7</message-counter-max-day-history>        
<!-- sample the queues every minute (60000ms) -->
<message-counter-sample-period>60000</message-counter-sample-period>
メッセージカウンターは、管理 API を使用して取得できます。たとえば、JMX を使用して JMS キューに関するメッセージカウンターを取得します。
// retrieve a connection to HornetQ's MBeanServer
MBeanServerConnection mbsc = ...
JMSQueueControlMBean queueControl = (JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc,
   on,
   JMSQueueControl.class,
   false);
// message counters are retrieved as a JSON String                                                                                                      
String counters = queueControl.listMessageCounter();
// use the MessageCounterInfo helper class to manipulate message counters more easily
MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);         
System.out.format("%s message(s) in the queue (since last sample: %s)
",
   counter.getDepth(),
   counter.getDepthDelta());