Sun Java System Message Queue 3 2005Q1 管理ガイド |
第 6 章
物理的送信先の管理Message Queue メッセージは、ブローカ上の物理的送信先によりコンシューマクライアントにルーティングされます。ブローカは物理的送信先に関連したメモリーと持続ストレージを管理し、その動作を設定します。
クラスタで、1 つのブローカ上に物理的送信先を作成すると、クラスタはその物理的送信先をすべてのブローカに伝えます。アプリケーションクライアントは、トピックにサブスクライブするか、クラスタ内の任意のブローカにあるキューから消費できます。こればブローカが共同作業でクラスタ間のメッセージをルーティングするためです。ただし、最初にメッセージが生成されたブローカだけは、そのメッセージの持続性と通知を管理します。
この章では、次の作業の方法について説明します。
表 13-5 に、物理的送信先を管理し、そのタスクを実行するための imqcmd サブコマンドに関する詳細を示します。
注
クライアントアプリケーションは、物理的送信先と対話する場合は常に Destination オブジェクトを使用します。プロバイダへの非依存性と移植性のために、クライアントは通常は管理者が作成した送信先オブジェクトを使用し、これは送信先管理対象オブジェクトと呼ばれます。第 8 章「管理対象オブジェクトの管理」で説明するように、管理対象オブジェクトはクライアントアプリケーションで使用できるように設定できます。
imqcmd コマンドユーティリティの使用imqcmd コマンドユーティリティを使用すると、物理的送信先を管理できます。imqcmd コマンドの構文は、ほかのブローカサービスの管理に使用する場合と同じになります。
imqcmd とそのサブコマンド、オプションについての詳細は、第 13 章「コマンドのリファレンス」で説明しています。
サブコマンド
表 6-1 には imqcmd サブコマンドが掲載されています。この章では、その使用法について説明します。これらのサブコマンドの詳細は、「物理的送信先管理サブコマンド」を参照してください。
物理的送信先の作成物理的送信先を作成するには、imqcmd create サブコマンドを使用します。次に示すのは、create サブコマンドの構文です。
物理的送信先を作成するときには、次の情報を指定する必要があります。
また、物理的送信先を更新する場合、プロパティも設定できます。
物理的送信先の多くのプロパティが、ブローカのメモリーリソースおよびメッセージフローを管理します。たとえば、物理的送信先に送信できるプロデューサの数、送信可能なメッセージの数とサイズ、および物理的送信先の制限に達したときにブローカが行う応答を指定できます。この制限は、ブローカの設定プロパティが制御するブローカ全体の制限に似ています。
次のプロパティは、キューの送信先とトピックの送信先のいずれにも使用します。
- maxNumMsgs。物理的送信先で許容されるコンシューマ配信されないメッセージの最大数を指定する。
- maxTotalMsgBytes。物理的送信先でコンシューマ配信されないメッセージ用として許容されるメモリーの最大量をバイト単位で指定する。
- limitBehavior。メモリー制限のしきい値に達したときのブローカの応答方法を指定する。
- maxBytesPerMsg。物理的送信先で許容されるシングルメッセージの最大サイズをバイト単位で指定する。
- maxNumProducers。物理的送信先のプロデューサの最大数を指定する。
- consumerFlowLimit。1 つのバッチでコンシューマに配信されるメッセージの最大数を指定する。
- isLocalOnly。ブローカクラスタに対してのみ適用。物理的送信先がそのほかのブローカに複製されないように指定する。つまり、メッセージの配信をローカルコンシューマ (物理的送信先の作成元にあるブローカに接続されたコンシューマ) だけに制限する。
- useDMQ。物理的送信先のデッドメッセージを破棄するか、デッドメッセージのキューに配置するかを指定する。
次のプロパティは、キューの送信先にのみ使用します。
物理的送信先のプロパティについての詳細は、第 15 章「物理的送信先のプロパティのリファレンス」を参照してください。
自動作成される送信先の場合は、ブローカのインスタンス設定ファイルにデフォルトのプロパティ値を設定します。自動作成されるプロパティの詳細を、表 14-4 に示しています。
物理的送信先を作成する
物理的送信先の一覧表示物理的送信先の現在のプロパティ値、物理的送信先に関連付けられているプロデューサまたはコンシューマの数、物理的送信先内のメッセージの数とサイズなどのメッセージングメトリックスに関する情報を取得できます。
情報を入手する物理的送信先を探す場合は、ブローカのすべての物理的送信先を一覧表示します。これには、list dst サブコマンドを使用します。次に示すのは、list dst サブコマンドの構文です。
このコマンドは、指定されたタイプの物理的送信先を一覧表示します。送信先のタイプ (-t) オプションの値は、q (キュー) または t (トピック) のいずれかになります。
送信先のタイプが指定されない場合は、すべてのタイプの物理的送信先が一覧表示されます。
list dst サブコマンドを使用すると、任意で、一覧表示する送信先のタイプを指定したり、一時的送信先を含めたりすることができます (-tmp オプションを使用)。一時的送信先はクライアントによって作成され、通常は、そのほかのクライアントへ送信されたメッセージへの返信を受信することを目的としています。
たとえば、myHost のポート 4545 上で実行しているブローカ上の物理的送信先すべてのリストを取得するには次のコマンドを入力します。
送信先のタイプ t でトピックのみを指定している場合を除き、デッドメッセージキュー、mq.sys.dmq がほかの物理的送信先と一緒に常に表示されます。
物理的送信先の情報の表示物理的送信先の現在のプロパティ値に関する情報を入手するには、query dst サブコマンドを使用します。次に示すのは、query dst サブコマンドの構文です。
このコマンドは、特定のタイプと名前の送信先に関する情報を一覧表示します。たとえば、次のように指定します。
このコマンドでは、次のような情報が出力されます。
また、出力は送信先に関連付けられたプロデューサとコンシューマの数を示しています。キューの送信先について、数字にはアクティブなコンシューマとバックアップコンシューマが含まれます。
update dst サブコマンドを使用すると、1 つ以上のプロパティの値を変更できます (「物理的送信先のプロパティの更新」を参照)。
物理的送信先のプロパティの更新物理的送信先のプロパティを変更するには、update dst サブコマンドと -o オプションを使用して、更新するプロパティを指定します。次に示すのは、update dst サブコマンドの構文です。
このコマンドは、指定した送信先の特定のプロパティ値を更新します。プロパティ名は、表 15-1 で説明しているいずれかのプロパティになります。
複数の -o オプションを使用すると、複数のプロパティを更新できます。たとえば、次のコマンドでは maxBytesPerMsg プロパティが 1000 に、MaxNumMsgs プロパティが 2000 にそれぞれ変更されます。
更新が可能なプロパティについては、第 15 章「物理的送信先のプロパティのリファレンス」を参照してください。
物理的送信先の type や isLocalOnly プロパティを更新する場合、update dst サブコマンドは使用できません。
注
デッドメッセージキューは、特殊な物理的送信先であり、プロパティがその他の送信先のプロパティと多少異なります。詳細は、「デッドメッセージキューの使用の設定」を参照してください。
物理的送信先の停止と再開プロデューサから送信先、送信先からコンシューマ、またはその両方のメッセージの配信を制御するために、物理的送信先を停止できます。特に、メッセージの生成が消費よりかなり高速な場合に、送信先がメッセージによって過負荷にならないように、送信先へのメッセージフローを停止できます。
物理的送信先との間で配信されるメッセージを停止するには、pause dst サブコマンドを使用します。次に示すのは、pause dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の送信先について、コンシューマへのメッセージ (-pst CONSUMERS)、プロデューサからのメッセージ (-pst PRODUCERS)、またはその両方 (-pst ALL) を停止します。送信先のタイプと名前が指定されない場合、すべての物理的送信先が停止します。デフォルト値は ALL です。
例:
停止した送信先への配信を再開するには、resume dst サブコマンドを使用します。次に示すのは、resume dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の停止された送信先についてメッセージの配信を再開します。送信先のタイプと名前が指定されていない場合は、すべての送信先が再開されます。
例:
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。各インスタンスを個別に停止する必要があります。
物理的送信先のパージ物理的送信先のキューに現在入っているメッセージは、すべてパージすることが可能です。物理的送信先をパージすると、送信先のキューに入っているすべてのメッセージが削除されます。
累積されたメッセージによって、システムのリソースが大幅に消費される場合に、これらのメッセージをパージすることができます。これは、登録済みのコンシューマクライアントがキューに入っていない場合やキューが多数のメッセージを受信する場合に発生する可能性があります。また、トピックの永続サブスクライバが、アクティブにならない場合にも発生する可能性があります。どちらの場合も、メッセージが必要以上に保持されます。
物理的送信先でメッセージをパージするには、purge dst サブコマンドを使用します。次に示すのは、purge dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先のメッセージをパージします。
例:
ブローカをシャットダウンした後、再起動するときに、古いメッセージを配信する必要がない場合は、-reset messges オプションを使用して、古いメッセージをパージします。たとえば、次のとおりです。
これで、ブローカを再起動すると、送信先のパージに関する問題が解消されます。
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。これらの送信先はそれぞれ個別にパージする必要があります。
物理的送信先の破棄物理的送信先を破棄するには、destroy dst サブコマンドを使用します。次に示すのは、destroy dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先のメッセージを破棄します。
例:
物理的送信先を破棄すると、その送信先のすべてのメッセージがパージされ、ブローカからその送信先がなくなるため、操作を元に戻すことはできません。
デッドメッセージキューを破棄することはできません。
物理的送信先の圧縮メッセージの持続ストアとして、プラグインされた JDBC 互換のデータストアではなく、組み込みのファイルベースのデータストアを使用している場合は、ディスク利用率を監視し、必要に応じてディスクを圧縮できます。
ファイルベースのメッセージストアは、保持される物理的送信先に応じてメッセージがディレクトリに格納されるように構成されています。各物理的送信先のディレクトリでは、大半のメッセージが可変長のレコードから成る 1 つのファイル、つまり可変長のレコードファイルに格納されます。断片化を減らすため、サイズが設定可能なしきい値を超えているメッセージは専用の個別のファイルに格納されます。
可変サイズのメッセージが保持されていて、その後可変長のレコードファイルから削除された場合、空きレコードが再利用されていないファイルに空白ができることがあります。
未使用の空きレコードを管理するために、コマンドユーティリティには、物理的送信先ごとにディスク利用率を監視したり、利用率の低下時に空きディスクスペースを再利用したりするためのサブコマンドが含まれています。
物理的送信先のディスク利用率の監視
物理的送信先のディスク利用率を監視するには、次のようなコマンドを使用します。
このコマンドでは、次のような情報が出力されます。
--------------------------------------
Reserved Used Utilization Ratio
--------------------------------------
806400 804096 99
1793024 1793024 100
2544640 2518272 98
サブコマンド出力の各列の意味は次のとおりです。
表 6-2 物理的送信先ディスク利用率のメトリックス
メトリックス
説明
Reserved (予約済み)
すべてのレコードによって使用されるディスクスペース (バイト単位)。アクティブメッセージを保持するレコードと再利用可能な空きレコードが含まれます。
Used (使用中)
アクティブメッセージを保持しているレコードによって使用されるディスクスペース (バイト単位)
Utilization Ratio (利用率)
使用されているディスクスペースを予約済みのディスクスペースで割ったときの商。割合が高いほど、アクティブメッセージを保持するためにより多くのディスクスペースが使用されています。
未使用の物理的送信先ディスクスペースの再利用
ディスク利用率のパターンは、特定の物理的送信先を使用しているメッセージングアプリケーションの特性によって異なります。また、物理的送信先との間でやり取りされる相対的なメッセージフローとメッセージの相対的なサイズに応じて、時間の経過とともに予約済みディスクスペースが拡大することがあります。
メッセージの生成レートがメッセージの消費レートを上回る場合は、一般に、空きレコードが再利用され利用率が高くなります。ただし、メッセージの生成レートがメッセージの消費レートと同程度かそれより低い場合は、利用率は低いと予測できます。
一般に、予約済みディスクスペースは安定化させ、利用率は高いまま維持させる必要があります。一般的に、システムが安定して、予約済みディスクスペースがほぼ一定になり利用率が高い (75% を超える) 状態に達した場合には、未使用のディスクスペースを再利用する必要はありません。システムが安定した状態になったが利用率が低い (50% を下回る) 場合は、ディスクを圧縮し、空きレコードが占有しているディスクスペースを再利用できます。
データストアを圧縮する場合は、compact dst サブコマンドを使用します。次に示すのは、compact dst サブコマンドの構文です。
このサブコマンドは、特定のタイプと名前の物理的送信先に対応する組み込みのファイルベースのデータストアを圧縮します。送信先のタイプと名前が指定されていない場合は、すべての送信先が圧縮されます。圧縮する前に、物理的送信先を停止する必要があります。
予約済みのディスクスペースが時間の経過とともに増え続けている場合は、送信先メモリーの制限プロパティと制限動作を設定して送信先のメモリー管理を設定し直す必要があります (表 15-1 を参照)。
未使用の物理的送信先ディスクスペースを再利用する
送信先のタイプと名前が指定されなかった場合、これらの操作はすべての物理的送信先に対して実行されます。
デッドメッセージキューの使用の設定デッドメッセージキュー mq.sys.dmq は、ブローカとブローカのその他の物理的送信先のデッドメッセージを保持する、システムで生成された物理的送信先です。デッドメッセージキューは、監視、システムの効率性の調整、トラブルシューティングに使用するツールです。「デッドメッセージ」の定義と、デッドメッセージキューの概要については、『Message Queue 技術の概要』を参照してください。
ブローカは起動時に自動的にデッドメッセージキューを作成します。ブローカは処理できないメッセージ、または生存期間を過ぎたメッセージを、キューに配置します。さらに、その他の物理的送信先が廃棄したメッセージの保持にデッドメッセージキューを使用することもあります。デッドメッセージキューを使用することで、システムのトラブルシューティングに有益な情報がもたらされます。
デッドメッセージキューの使用の設定
デフォルトでは、物理的送信先は、デッドメッセージキューを有効に設定しています。物理的送信先がデッドメッセージキューを使用しないように設定できます。あるいは物理的送信先プロパティ useDMQ を設定して有効にすることもできます。
次の例では、デフォルトでデッドメッセージキューを使用する、myDist と呼ばれるキューが作成されます。
次の例では、同じキューに対してデッドメッセージキューの使用が無効になります。
ブローカ上の自動作成されたすべての物理的送信先で、デッドメッセージキューの使用を有効にしたり、imq.autocreate.destination.useDMQ ブローカプロパティを設定して、デッドメッセージキューの使用を無効にしたりできます。
デッドメッセージキューを設定し管理する
imqcmd コマンドユーティリティは、デッドメッセージキューを管理します。デッドメッセージキューは、ほかのキューと同じように管理しますが、いくつかの相違点があります。たとえば、デッドメッセージキューはシステムで生成されるため、作成、停止、破棄の操作は行えません。
デッドメッセージキューのプロパティ
デッドメッセージキューは、ほかのキューの設定と同様に設定しますが、特定の物理的送信先のプロパティは適用されません。あるいは別のデフォルト値が指定されます。表 6-3 にデッドメッセージキューが独自の方法で処理するキュープロパティを一覧表示しています。
表 6-3 標準の物理的送信先プロパティのデッドメッセージキューの処理
プロパティ
デッドメッセージキューによる固有の処理
limitBehavior
デッドメッセージキューのデフォルト値は、REMOVE_OLDEST です。その他のキューのデフォルト値は REJECT_NEWEST です。デッドメッセージキューでは、フロー制御はサポートされません。
localDeliveryPreferred
デッドメッセージキューに適用されません。
maxNumMsgs
デッドメッセージキューのデフォルト値は 1000 です。その他のキューのデフォルト値は -1 (無制限) です。
maxNumProducers
デッドメッセージキューに適用されません。
maxTotalMsgBytes
デッドメッセージキューのデフォルト値は、10M バイトです。その他のキューのデフォルト値は -1 (無制限) です。
isLocalOnly
ブローカクラスタで、デッドメッセージキューは常にローカルの物理的送信先になり、このプロパティは永続的に true に設定されます。ただし、ローカルブローカがメッセージをデッドメッセージとマークしている場合、ローカルブローカのデッドメッセージキューには、クラスタのほかのブローカのクライアントが生成したメッセージが格納される場合があります。
メッセージの内容
ブローカはメッセージ全体をデッドメッセージキューに配置できます。あるいはヘッダーとプロパティデータのみを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。
キューのサイズを減らし、デッドメッセージを復元する予定がない場合は、本体の内容を破棄することを検討してください。
本体の内容を破棄し、ヘッダーとプロパティデータのみを残す場合は、次の例に示すように、imq.destination.DMQ.truncateBody ブローカプロパティを true に設定します。
デッドメッセージのロギングを有効にする
標準のキューの監視とロギングオプションに加えて、ブローカがデッドメッセージと分類したメッセージのロギングを実行できます。
デッドメッセージのロギングを有効にした場合、ブローカは次のタイプのイベントのロギングを実行します。
デッドメッセージのロギングは、デフォルトでは無効になっています。次の例では、デッドメッセージのロギングを有効にしています。
デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理的送信先に適用されます。物理的送信先の個々については、ロギングを有効または無効に設定できません。