28.3. コア API を介した管理の使用

HornetQ のコア管理 API は、コアメッセージを管理アドレス に送信することによって呼び出されます。
管理メッセージは、サーバーが管理 API と対話するために理解する必要があるよく知られたプロパティーを持つ通常のコアメッセージです。
  • 管理対象リソースの名前
  • 管理操作の名前
  • 管理操作のパラメーター
管理メッセージが管理アドレスに送信された場合、HornetQ は、次のようにメッセージを処理します。
  • 情報を抽出します。
  • 管理対象リソースに対する操作を呼び出します。
  • 管理メッセージの返信先アドレスに管理返信を送信します。
返信先アドレスに送信された管理返信は、org.hornetq.core.client.impl.ClientMessageImpl.REPLYTO_HEADER_NAME パラメーターにより制御されます。
ClientConsumer は、管理返信を消費し、返信のボディーに保存された操作 (存在する場合) の結果を取得するために使用できます。移植性のために、結果は Java Serialization ではなく JSON 文字列で返されます。org.hornetq.api.core.management.ManagementHelper は、JSON 文字列を Java オブジェクトに変換するために使用できます。
これらの手順は、コアメッセージを使用して管理操作を呼び出すことを簡単にするために単純化できます。

手順28.1 管理操作の呼び出し

  1. 手順 1

    ClientRequestor を作成して、メッセージを管理アドレスに送信し、返信を受け取ります。
  2. 手順 2

    ClientMessage を作成します。
  3. 手順 3

    ヘルパークラス org.hornetq.api.core.management.ManagementHelper を使用してメッセージに管理プロパティーを満たします。
  4. 手順 4

    ClientRequestor を使用してメッセージを送信します。
  5. 手順 5

    ヘルパークラス org.hornetq.api.core.management.ManagementHelper を使用して管理返信から操作結果を取得します。
たとえば、コアキュー exampleQueue 内のメッセージの数を調べる場合は、以下のようになります。
   ClientSession session = ...
   ClientRequestor requestor = new ClientRequestor(session, "jms.queue.hornetq.management");
   ClientMessage message = session.createMessage(false);
   ManagementHelper.putAttribute(message, "core.queue.exampleQueue", "messageCount");
   ClientMessage reply = requestor.request(m);
   int count = (Integer) ManagementHelper.getResult(reply);
   System.out.println("There are " + count + " messages in exampleQueue");
管理操作名とパラメーターは、management パッケージで定義された Java インターフェースに準拠する必要があります。
リソースの名前は、ヘルパークラス org.hornetq.api.core.management.ResourceNames を使用して構築され、わかりやすくなります(コアキュー exampleQueue に対する core.queue.exampleQueue、JMS トピック exampleTopic に対する jms.topic.exampleTopic など)。

28.3.1. コア管理の設定

管理メッセージを送信する管理アドレスは、JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml で設定されます。
<management-address>jms.queue.hornetq.management</management-address>
デフォルトでは、アドレスは jms.queue.hornetq.management です (この先頭には "jms.queue" が付加されるため、JMS クライアントは管理メッセージを送信することもできます)。
管理アドレスは、管理メッセージを受信および処理するために特別なユーザーパーミッション manage を必要とします。これは、JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml でも設定されます。
<!-- users with the admin role will be allowed to manage --> 
<!-- HornetQ using management messages        -->
<security-setting match="jms.queue.hornetq.management">
   <permission type="manage" roles="admin" />
</security-setting>