第28章 管理

HornetQ には、拡張管理 API が含まれ、ユーザーは以下のことを行えます。
  • サーバー設定の変更。
  • 新しいリソースの作成 (たとえば、JMS キューやトピック)。
  • これらのリソースの検査 (たとえば、キューに現在保持されているメッセージの数)。
  • これらのリソースとの対話 (つまり、キューからのメッセージの削除)。
すべての操作で、クライアントが HornetQ を管理できます。また、クライアントは管理通知をサブスクライブできます。
HornetQ を管理するには 3 つの方法があります。
  • JMX の使用。JMX は、Java アプリケーションを管理する標準的な方法です。
  • コア API の使用。管理操作はコアメッセージを使用して HornetQ サーバーに送信されます。
  • JMS API の使用。管理操作は JMS メッセージを使用して HornetQ サーバーに送信されます。
HornetQ を管理するために 3 つの異なる方法がありますが、各 API は同じ機能をサポートします。JMX を使用してリソースを管理できる場合は、コアメッセージまたは JMS メッセージを使用して同じ結果を達成できます。
どれが最適かを決定する選択は要件、アプリケーション設定、および環境に基づきます。

28.1. 管理 API

管理 API は、管理操作を呼び出す方法に関係なく同じです。管理対象リソースの各タイプに対して、呼び出すことができる対象を定義する Java インターフェースが存在します。
HornetQ は、2 つのパッケージで管理対象リソースを公開します。
  • コアリソースは、org.hornetq.api.core.management パッケージに含まれます。
  • JMS リソースは org.hornetq.api.jms.management パッケージに含まれます。
管理操作を呼び出す方法は、JMX、コアメッセージ、または JMS を使用するかどうかによって異なります。

注記

いくつかの管理操作では、フィルターパラメーターによって、操作で呼び出すメッセージを選択する必要があります。null または空の文字列を渡すと、管理操作がすべてのメッセージで実行されます。

28.1.1. コア管理 API

HornetQ は、コアリソースを管理するコア管理 API を定義します。概要を以下に示します。

28.1.1.1. コアサーバー管理

キューのリスト、作成、デプロイ、および破棄
デプロイされたコアキューのリストは、getQueueNames() メソッドを使用して取得できます。
コアキューは、管理操作を使用して作成または破棄できます。
  • createQueue()
  • deployQueue()
  • HornetQServerControldestroyQueue() (ObjectName org.hornetq:module=Core,type=Server またはリソース名 core.server を使用)
キューがすでに存在し、deployQueue が何も行わない場合は、createQueue が失敗します。
キューの一時停止と再開
QueueControl は、基礎となるキューを一時停止および再開できます。キューが一時停止した場合、キューはメッセージを受け取りますが、配信しません。キューが再開された場合に、キューに格納されたメッセージの配信が開始されます。
リモート接続をリストし、閉じる
クライアントリモートアドレスは、listRemoteAddresses() を使用して取得できます。closeConnectionsForAddress() メソッドを使用してリモートアドレスに関連付けられた接続を閉じることもできます。
または、接続 ID を listConnectionIDs() を使用してリストしたり、該当する接続 ID のすべてのセッションを listSessions() を使用してリストしたりできます。
トランザクションヒューリスティック操作
サーバークラッシュの場合に、一部のトランザクションでは、サーバーの再起動時に手動で作業する必要があることがあります。listPreparedTransactions() メソッドは、準備状態のトランザクションをリストします (トランザクションは不透明な Base64 文字列として表されます)。該当する準備状態のトランザクションをコミットまたはロールバックするために、commitPreparedTransaction() または rollbackPreparedTransaction() メソッドを使用してヒューリスティックトランザクションを解決できます。ヒューリスティックに完了したトランザクションは、listHeuristicCommittedTransactions() メソッドと listHeuristicRolledBackTransactions メソッドを使用してリストできます。
メッセージカウンターの有効化とリセット
メッセージカウンターは、enableMessageCounters() または disableMessageCounters() メソッドを使用して有効化または無効化できます。メッセージカウンターをリセットするために、resetAllMessageCounters() および resetAllMessageCounterHistories() メソッドを呼び出すことができます。
サーバー設定と属性の取得
HornetQServerControl は、HornetQ サーバー設定をそのすべての属性を介して公開します (たとえば、サーバーのバージョンを取得する getVersion() メソッドなど)。

28.1.1.2. コアアドレス管理

コアアドレスは、AddressControl クラス (ObjectName org.hornetq:module=Core,type=Address,name="<the address name>" またはリソース名 core.address.<the address name> と使用) を使用して管理できます。
アドレスのロールとパーミッションの変更
addRole() または removeRole() メソッドを使用してキューに関連付けられたロールを追加または削除できます。キューに関連付けられたすべてのロールはgetRoles() メソッドでリストできます。

28.1.1.3. コアキュー管理

たくさんのコア管理 API はコアキューを取り扱います。QueueControl クラスは、コアキュー管理操作を定義します (ObjectName org.hornetq:module=Core,type=Queue,address="<the bound address>",name="<the queue name>" またはリソース名 core.queue.<the queue name> と使用)。
キューに関するほとんどの管理操作は単一のメッセージ ID (たとえば、単一のメッセージを削除するために) またはフィルター (たとえば、該当するプロパティーのすべてのメッセージを期限切れにするために) を取得します。
デッドレターアドレスの期限切れ、デッドレターアドレスへの送信、メッセージの移動
メッセージは、expireMessages() メソッドを使用してキューで期限切れにすることができます。期限が切れたアドレスが定義された場合、メッセージはそのアドレスに送信され、送信されない場合は破棄されます。キューの期限切れのアドレスは setExpiryAddress() メソッドで設定できます。
また、メッセージは sendMessagesToDeadLetterAddress() メソッドを使用してデッドレターアドレスに送信することもできます。これは、デッドレターアドレスに送信されたメッセージの数を返します。デッドレターアドレスが定義されない場合、メッセージはキューから削除され、破棄されます。キューのデッドレターアドレスは、setDeadLetterAddress() メソッドで設定できます。
メッセージは、moveMessages() メソッドを使用してあるキューから別のキューに移動することもできます。
メッセージのリストと削除
メッセージは、listMessages() メソッドを使用してキューからリストできます。このメソッドは Map のアレイを返します。各メッセージに対して 1 つの Map が存在します。
メッセージは、単一のメッセージ ID バリアントに対して boolean またはフィルターバリアントに対して削除済みメッセージの数を返す removeMessages() メソッドを使用してキューから削除することもできます。removeMessages() メソッドは filter 引数を受け取ってフィルタリングされたメッセージのみを削除します。フィルターを空の文字列に設定すると、すべてのメッセージが削除されます。
メッセージのカウント
キュー内のメッセージの数は、getMessageCount() メソッドにより返されます。また、countMessages() は、該当するフィルターに一致したキュー内のメッセージの数を返します。
メッセージ優先度の変更
メッセージ優先度は、単一のメッセージ ID バリアントに対して boolean、フィルターバリアントに対して更新済みメッセージの数を返す changeMessagesPriority() メソッドを使用して変更できます。
メッセージカウンター
メッセージカウンターは、listMessageCounter()listMessageCounterHistory() メソッドでキューに対してリストできます (「メッセージカウンター」 を参照)。また、メッセージカウンターは、resetMessageCounter() メソッドを使用して単一のキューに対してリセットできます。
キュー属性の取得
QueueControl は、属性を介してコアキューの設定を公開します (たとえば、キューのフィルターを取得する getFilter() (作成された場合) やキューが耐性かどうかを認識する isDurable() など)。
キューの一時停止と再開
QueueControl は、基礎となるキューを一時停止および再開できます。キューが一時停止した場合、キューはメッセージを受け取りますが、配信しません。キューが再開された場合に、キューに格納されたメッセージの配信が開始されます。

28.1.1.4. 他のコアリソース管理

HornetQ では、ユーザーがリモートリソース (アクセプター、迂回、ブリッジなど) を開始および停止できるため、サーバーを完全に停止せずにオフラインにできます (たとえば、ヒューリスティックトランザクションの解決など他の管理操作を実行する必要がある場合)。これらのリソースは以下のとおりです。
アクセプター
アクセプターは、AcceptorControl クラスの start() または stop() メソッドを使用して開始または停止できます (org.hornetq:module=Core,type=Acceptor,name="<the acceptor name>" またはリソース名 core.acceptor.<the address name> とともに使用)。アクセプターのパラメーターは、AcceptorControl 属性を使用して取得できます (「アクセプターについて」 を参照)。
迂回
迂回は DivertControl クラスの start() または stop() を使用して開始または停止できます (ObjectName org.hornetq:module=Core,type=Divert,name=<the divert name> またはリソース名 core.divert.<the divert name> とともに使用)。迂回パラメーターは、DivertControl 属性を使用して取得できます (33章メッセージフローの迂回と分割 を参照)。
ブリッジ
これらは、BridgeControl クラスの start() (resp. stop()) メソッドを使用して開始または停止できます (ObjectName org.hornetq:module=Core,type=Bridge,name="<the bridge name>" またはリソース名 core.bridge.<the bridge name> とともに使用)。ブリッジパラメーターは、BridgeControl 属性を使用して取得できます (34章コアブリッジ を参照)。
ブロードキャストグループ
ブロードキャストグループは、BroadcastGroupControl クラスの start() または stop() を使用して開始または停止できます (ObjectName org.hornetq:module=Core,type=BroadcastGroup,name="<the broadcast group name>" またはリソース名 core.broadcastgroup.<the broadcast group name> とともに使用)。ブロードキャストグループパラメーターは、BroadcastGroupControl 属性を使用して取得できます (「ブロードキャストグループ」 を参照)。
検出グループ
これらは、DiscoveryGroupControl クラスの start() または stop() めそっどを使用して開始または停止できます (ObjectName org.hornetq:module=Core,type=DiscoveryGroup,name="<the discovery group name>" またはリソース名 core.discovery.<the discovery group name> とともに使用)。検出グループパラメーターは、DiscoveryGroupControl 属性を使用して取得できます (「検出グループ」 を参照)。
クラスター接続
これらは、ClusterConnectionControl クラスの start() または stop() メソッドを使用して開始または停止できます (ObjectName org.hornetq:module=Core,type=ClusterConnection,name="<the cluster connection name>" またはリソース名 core.clusterconnection.<the cluster connection name> とともに使用)。クラスター接続パラメーターは、ClusterConnectionControl 属性を使用して取得できます (「クラスター接続の設定」 を参照)。

28.1.2. JMS 管理 API

HornetQ は、JMS 管理オブジェクト (つまり、JMS キュー、トピック、および接続ファクトリー) を管理する JMS 管理 API を定義します。

28.1.2.1. JMS サーバー管理

JMS リソース (接続ファクトリーおよび宛先) は、JMSServerControl クラスを使用して作成できます (ObjectName org.hornetq:module=JMS,type=Server またはリソース名 jms.server とともに使用)。
接続ファクトリーのリスト、作成、破棄
デプロイされた接続ファクトリーの名前は、getConnectionFactoryNames() メソッドにより取得できます。
JMS 接続ファクトリーは、createConnectionFactory() メソッドまたは destroyConnectionFactory() メソッドを使用して作成または破棄できます。これらの接続ファクトリーは、JNDI にバインドされ、JMS クライアントはこれらをルックアップできます。接続ファクトリーを作成するためにグラフィカルコンソールが使用された場合は、トランザクションパラメーターがテキストフィールド入力で、キー = 値 (つまり、key1=10, key2="value", key3=false) のカンマ区切りのリストとして指定されます。複数のトランスポートが定義された場合は、キーと値のペアを中かっこで囲む必要があります (たとえば、{key=10}, {key=20})。この場合、最初の key は最初のトランスポート設定に関連付けられ、2 つ目の key は 2 つ目のトランスポート設定に関連付けられます (トランスポートパラメーターのリストについては、14章トランスポートの設定 を参照してください)。
キューのリスト、作成、破棄
デプロイされた JMS キューの名前は、getQueueNames() メソッドを使用して取得できます。
JMS キューは、createQueue() メソッドまたは destroyQueue() メソッドを使用して作成または破棄できます。これらのキューは JNDI にバインドされるため、JMS クライアントはこれらをルックアップできます。
トピックのリスト、作成、破棄
デプロイされたトピックの名前は、getTopicNames() メソッドを使用して取得できます。
JMS トピックは、createTopic() または destroyTopic() メソッドを使用して作成または破棄できます。これらのトピックは JNDI にバインドされるため、JMS クライアントはこれらをルックアップできます。
リモート接続をリストし、閉じる
JMS クライアントリモートアドレスは、listRemoteAddresses() を使用して取得できます。また、closeConnectionsForAddress() メソッドを使用してリモートアドレスに関連付けられた接続を閉じることもできます。
または、接続 ID を listConnectionIDs() を使用してリストしたり、該当する接続 ID のすべてのセッションを listSessions() を使用してリストしたりできます。

28.1.2.2. JMS ConnectionFactory 管理

JMS 接続ファクトリーは、ConnectionFactoryControl クラスを使用して管理できます (ObjectName org.hornetq:module=JMS,type=ConnectionFactory,name="<the connection factory name>" またはリソース名 jms.connectionfactory.<the connection factory name> とともに使用)。
接続ファクトリー属性の取得
ConnectionFactoryControl は、JMS ConnectionFactory 設定をその属性を介して公開します (つまり、フロー制御に対してコンシューマーウィンドウサイズを取得するために getConsumerWindowSize()、非耐性メッセージの送信時に接続ファクトリーから作成されたプロデューサーがブロックされるかどうかを認識するために isBlockOnNonDurableSend())。

28.1.2.3. JMS キュー管理

JMS キューは、JMSQueueControl クラスを使用して管理できます (ObjectName org.hornetq:module=JMS,type=Queue,name="<the queue name>" またはリソース名 jms.queue.<the queue name> とともに使用)。
JMS キューに関する管理操作は、コアキューに関する管理操作と非常に似ています。
デッドレターアドレスの期限切れ、デッドレターアドレスへの送信、メッセージの移動
メッセージは、expireMessages() メソッドを使用してキューで期限切れにすることができます。期限が切れたアドレスが定義された場合、メッセージはそのアドレスに送信され、送信されない場合は破棄されます。キューの期限切れのアドレスは setExpiryAddress() メソッドで設定できます。
また、メッセージは sendMessagesToDeadLetterAddress() メソッドを使用してデッドレターアドレスに送信することもできます。これは、デッドレターアドレスに送信されたメッセージの数を返します。デッドレターアドレスが定義されない場合、メッセージはキューから削除され、破棄されます。キューのデッドレターアドレスは、setDeadLetterAddress() メソッドで設定できます。
メッセージは、moveMessages() メソッドを使用してあるキューから別のキューに移動することもできます。
メッセージのリストと削除
メッセージは、listMessages() メソッドを使用してキューからリストできます。このメソッドは Map のアレイを返します。各メッセージに対して 1 つの Map が存在します。
メッセージは、単一のメッセージ ID バリアントに対して boolean またはフィルターバリアントに対して削除済みメッセージの数を返す removeMessages() メソッドを使用してキューから削除することもできます。removeMessages() メソッドは filter 引数を受け取ってフィルタリングされたメッセージのみを実際に削除します。フィルターを空の文字列に設定すると、すべてのメッセージが削除されます。
メッセージのカウント
キュー内のメッセージの数は、getMessageCount() メソッドにより返されます。また、countMessages() は、該当するフィルターに一致したキュー内のメッセージの数を返します。
メッセージ優先度の変更
メッセージ優先度は、単一のメッセージ ID バリアントに対して boolean、フィルターバリアントに対して更新済みメッセージの数を返す changeMessagesPriority() メソッドを使用して変更できます。
メッセージカウンター
メッセージカウンターは、listMessageCounter()listMessageCounterHistory() メソッドでキューに対してリストできます (「メッセージカウンター」 を参照)。
キュー属性の取得
JMSQueueControl は、JMS キューの設定をその属性を介して公開します (たとえば、キューが一時的かどうかを識別するために isTemporary()、キューが耐性かどうかを識別するために isDurable())。
キューの一時停止と再開
JMSQueueControl は、基礎となるキューを一時停止および再開できます。キューが一時停止した場合、キューはメッセージを受け取りますが、配信しません。キューが再開された場合に、キューに格納されたメッセージが配信されます。

28.1.2.4. JMS トピック管理

JMS トピックは、TopicControl クラスを使用して管理できます (ObjectName org.hornetq:module=JMS,type=Topic,name="<the topic name>" またはリソース名 jms.topic.<the topic name> とともに使用)。
サブスクリプションおよびメッセージのリスト
JMS トピックサブスクリプションは、listAllSubscriptions()listDurableSubscriptions()listNonDurableSubscriptions() メソッドを使用してリストできます。これらのメソッドは、サブスクリプション情報 (サブスクリプション名、クライアント ID、耐性、メッセージ数など) を表す Object のアレイを返します。また、listMessagesForSubscription() メソッドを使用して該当するサブスクリプションの JMS メッセージをリストすることもできます。
サブスクリプションのドロップ
耐性サブスクリプションは、dropDurableSubscription() メソッドを使用してトピックからドロップできます。
サブスクリプションメッセージのカウント
countMessagesForSubscription() メソッドは、該当するサブスクリプションに対して保持されたメッセージの数を調べるために使用できます (セレクターに一致するメッセージの数を調べるためのオプションのメッセージセレクターがあります)。