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());