この章では、imqcmd ユーティリティーを使用して、物理的送信先を管理する方法を説明します。Message QueueTM メッセージは、ブローカ上の物理的送信先によりコンシューマクライアントにルーティングされます。ブローカは物理的送信先に関連したメモリーと持続ストレージを管理し、その動作を設定します。
クラスタで、1 つのブローカ上に物理的送信先を作成すると、クラスタはその物理的送信先をほかのすべてのブローカに伝えます。アプリケーションクライアントは、トピックにサブスクライブするか、クラスタ内の任意のブローカにあるキューから消費できます。こればブローカが共同作業でクラスタ間のメッセージをルーティングするためです。ただし、最初にメッセージが生成されたブローカだけは、そのメッセージの持続性と通知を管理します。
この章では、次のトピックについて説明します。
表 13–5 に、物理的送信先を管理し、そのタスクを実行するための imqcmd サブコマンドに関する詳細を示します。
物理的送信先の概要については、『Message Queue 技術の概要』を参照してください。
クライアントアプリケーションは、物理的送信先と対話する場合は常に Destination オブジェクトを使用します。プロバイダへの非依存性と移植性のために、クライアントは通常は管理者が作成した送信先オブジェクトを使用し、これは送信先管理対象オブジェクトと呼ばれます。第 8 章「管理対象オブジェクトの管理」で説明するように、管理対象オブジェクトはクライアントアプリケーションで使用できるように設定できます。
Message Queue コマンドユーティリティー (imqcmd) を使用して、物理的送信先を管理します。imqcmd コマンドの構文は、ほかのブローカサービスの管理に使用する場合と同じです。
imqcmd とそのサブコマンド、オプションについての詳細は、第 13 章「コマンド行のリファレンス」で説明しています。
表 6–1 には imqcmd サブコマンドが掲載されています。この章では、その使用法について説明します。これらのサブコマンドの詳細は、「物理的送信先管理」を参照してください。
表 6–1 コマンドユーティリティーの物理的送信先のサブコマンド
サブコマンドと引数 |
説明 |
---|---|
compact dst |
1 つ以上の物理的送信先に対応するファイルベースのデータストアを圧縮します。 |
create dst |
物理的送信先を作成します。 |
destroy dst |
物理的送信先を廃棄します。 |
list dst |
ブローカの物理的送信先を一覧表示します。 |
metrics dst |
物理的送信先のメトリックスを表示します。 |
pause dst |
ブローカの 1 つ以上の物理的送信先を停止します。 |
purge dst |
物理的送信先のすべてのメッセージを、物理的送信先を破棄せずに消去します。 |
query dst |
物理的送信先の情報をクエリーおよび表示します。 |
resume dst |
ブローカの 1 つ以上の停止された物理的送信先を再開します。 |
update dst |
送信先のプロパティーを更新します。 |
物理的送信先を作成するには、imqcmd create サブコマンドを使用します。次に示すのは、create サブコマンドの構文です。
create dst -t destType -n destName [-o property=value ] [-o property=value1] …
たとえば、キューの送信先を作成するには、次のようなコマンドを入力します。
imqcmd create dst -n myQueue -t q -o “maxNumActiveConsumers=5” |
トピックの送信先を作成するには、次のようなコマンドを入力します。
imqcmd create dst -n myTopic -t t -o “maxBytesPerMsg=5000” |
物理的送信先を作成するときには、次の情報を指定する必要があります。
物理的送信先のタイプ。t (トピック)、または q (キュー) のいずれか。
物理的送信先名。次のような命名規則があります。
名前には英数字のみを使用する。スペースは使用できない。
名前は英字、下線文字 (_)、ドル記号 ($) のいずれかで始める。文字列「mq」で開始することはできない。
物理的送信先のプロパティーには、デフォルト以外の値を指定する。
また、物理的送信先を更新する場合、プロパティーも設定できます。
物理的送信先の多くのプロパティーが、ブローカのメモリーリソースおよびメッセージフローに影響します。たとえば、物理的送信先に送信できるプロデューサの数、送信可能なメッセージの数とサイズ、および物理的送信先の制限に達したときにブローカが行う応答を指定できます。この制限は、ブローカの設定プロパティーによって制御されるブローカ全体の制限に似ています。
次のプロパティーは、キューの送信先とトピックの送信先のいずれにも使用します。
maxNumMsgs。物理的送信先で許容されるコンシューマ配信されないメッセージの最大数を指定します。
maxTotalMsgBytes。物理的送信先でコンシューマ配信されないメッセージ用として許容されるメモリーの最大量をバイト単位で指定します。
maxBytesPerMsg。物理的送信先で許容されるシングルメッセージの最大サイズをバイト単位で指定します。
isLocalOnly。ブローカクラスタに対してのみ適用します。物理的送信先がそのほかのブローカに複製されないように指定します。つまり、メッセージの配信をローカルコンシューマ (物理的送信先の作成元にあるブローカに接続されたコンシューマ) だけに制限します。
useDMQ。物理的送信先のデッドメッセージを破棄するか、デッドメッセージのキューに配置するかを指定します。
次のプロパティーは、キューの送信先にのみ使用します。
maxNumActiveConsumers。ロードバランスされたキュー送信先からの配信でアクティブにできるコンシューマの最大数を指定します。
maxNumBackupConsumers。キュー送信先からのロードバランスされた配信で障害が生じた場合に、アクティブコンシューマに代わることができるバックアップコンシューマの最大数を指定します。
localDeliveryPreferred。ブローカクラスタ内のロードバランスされたキュー配信にのみ適用します。ローカルブローカ上にコンシューマが存在しない場合にだけ、メッセージがリモートコンシューマに配信されるように指定します。
物理的送信先のプロパティーについての詳細は、第 15 章「物理的送信先のプロパティーのリファレンス」を参照してください。
自動作成される送信先の場合は、ブローカのインスタンス設定ファイルにデフォルトのプロパティー値を設定します。自動作成されるプロパティーの詳細を、表 14–3 に示しています。
物理的送信先の現在のプロパティー値、物理的送信先に関連付けられているプロデューサまたはコンシューマの数、物理的送信先内のメッセージの数とサイズなどのメッセージングメトリックスに関する情報を取得できます。
情報を入手する物理的送信先を探す場合は、list dst サブコマンドを使用して、ブローカのすべての物理的送信先を一覧表示します。次に示すのは、list dst サブコマンドの構文です。
list dst [-t destType] [-tmp]
このコマンドは、指定されたタイプの物理的送信先を一覧表示します。送信先のタイプ (-t) オプションの値は、q (キュー) または t (トピック) のいずれかになります。
送信先のタイプを指定しない場合は、すべてのタイプの物理的送信先が一覧表示されます。
list dst サブコマンドを使用すると、任意で、一覧表示する送信先のタイプを指定したり、一時的送信先を含めたりすることができます (-tmp オプションを使用)。一時的送信先はクライアントによって作成され、通常は、そのほかのクライアントへ送信されたメッセージへの返信を受信することを目的としています。
たとえば、myHost のポート 4545 上で実行しているブローカ上の物理的送信先すべてのリストを取得するには次のコマンドを入力します。
imqcmd list dst -b myHost:4545
送信先のタイプ t でトピックのみを指定している場合を除き、デッドメッセージキューの情報 mq.sys.dmq がほかの物理的送信先と一緒に常に表示されます。
物理的送信先の現在のプロパティーに関する情報を入手するには、query dst サブコマンドを使用します。次に示すのは、query dst サブコマンドの構文です。
query dst -t destType -n destName
このコマンドは、特定のタイプと名前の送信先に関する情報を一覧表示します。たとえば、次のコマンドはキューの送信先 XQueue に関する情報を表示します。
imqcmd query dst -t q -n XQueue -u admin
このコマンドでは、次のような情報が出力されます。
------------------------------------ Destination Name Destination Type ------------------------------------ XQueue Queue On the broker specified by: ------------------------- Host Primary Port ------------------------- localhost 7676 Destination Name XQueue Destination Type Queue Destination State RUNNING Created Administratively true Current Number of Messages 0 Current Total Message Bytes 0 Current Number of Producers 0 Current Number of Active Consumers 0 Current Number of Backup Consumers 0 Max Number of Messages unlimited (-1) Max Total Message Bytes unlimited (-1) Max Bytes per Message unlimited (-1) Max Number of Producers 100 Max Number of Active Consumers 1 Max Number of Backup Consumers 0 Limit Behavior REJECT_NEWEST Consumer Flow Limit 1000 Is Local Destination false Local Delivery is Preferred false Use Dead Message Queue true |
また、出力は送信先に関連付けられたプロデューサとコンシューマの数を示しています。キューの送信先について、数字にはアクティブなコンシューマとバックアップコンシューマが含まれます。
update dst サブコマンドを使用すると、1 つ以上のプロパティーの値を変更できます (「物理的送信先のプロパティーの更新」を参照)。
物理的送信先のプロパティーを変更するには、update dst サブコマンドと -o オプションを使用して、更新するプロパティーを指定します。次に示すのは、update dst サブコマンドの構文です。
update dst -t destType -n destName -o property=value [[-o property=value1]…]
このコマンドは、指定した送信先の特定のプロパティー値を更新します。プロパティー名は、表 15–1 で説明しているいずれかのプロパティーになります。
複数の -o オプションを使用すると、複数のプロパティーを何度も更新できます。たとえば、次のコマンドでは maxBytesPerMsg プロパティーが 1000 に、MaxNumMsgs プロパティーが 2000 にそれぞれ変更されます。
imqcmd update dst -t q -n myQueue -o “maxBytesPerMsg=1000” -o “maxNumMsgs=2000” -u admin
更新が可能なプロパティーについては、第 15 章「物理的送信先のプロパティーのリファレンス」を参照してください。
物理的送信先の type や isLocalOnly プロパティーを更新する場合、update dst サブコマンドは使用できません。
デッドメッセージキューは、特殊な物理的送信先であり、プロパティーがその他の送信先のプロパティーと多少異なります。詳細は、「デッドメッセージキューの使用の設定」を参照してください。
プロデューサから送信先、送信先からコンシューマ、またはその両方のメッセージの配信を制御するために、物理的送信先を停止できます。特に、メッセージの生成が消費よりかなり高速な場合に、送信先がメッセージによって過負荷にならないように、送信先へのメッセージフローを停止できます。圧縮する前に物理的送信先を停止する必要があります。
物理的送信先との間で配信されるメッセージを停止するには、pause dst サブコマンドを使用します。次に示すのは、 pause dst サブコマンドの構文です。
pause dst [-t destType -n destName] [-pst pauseType]
このサブコマンドは、特定のタイプと名前の送信先について、コンシューマへのメッセージ (-pst CONSUMERS)、プロデューサからのメッセージ (-pst PRODUCERS)、またはその両方 (-pst ALL) を停止します。送信先のタイプと名前が指定されない場合、すべての物理的送信先が停止します。デフォルト値は ALL です。
例:
imqcmd pause dst -n myQueue -t q -pst PRODUCERS -u admin imqcmd pause dst -n myTopic -t t -pst CONSUMERS -u admin
停止した送信先への配信を再開するには、resume dst サブコマンドを使用します。次に示すのは、resume dst サブコマンドの構文です。
resume dst [-t destType -n destName]
このサブコマンドは、特定のタイプと名前の停止された送信先についてメッセージの配信を再開します。送信先のタイプと名前が指定されていない場合は、すべての送信先が再開されます。
例:
imqcmd resume dst -n myQueue -t q
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。各インスタンスを個別に停止する必要があります。
物理的送信先のキューに現在入っているメッセージは、すべて消去することが可能です。物理的送信先を消去すると、送信先に保存されているすべてのメッセージが削除されます。
累積されたメッセージによって、システムのリソースが大幅に消費される場合に、これらのメッセージを消去することができます。これは、登録済みのコンシューマクライアントがキューに入っていない場合やキューが多数のメッセージを受信する場合に発生する可能性があります。また、トピックの永続サブスクライバが、アクティブにならない場合にも発生する可能性があります。どちらの場合も、メッセージが必要以上に保持されます。
物理的送信先でメッセージを消去するには、purge dst サブコマンドを使用します。次に示すのは、purge dst サブコマンドの構文です。
purge dst -t destType -n destName
このサブコマンドは、指定されたタイプと名前の物理的送信先のメッセージを消去します。
例:
imqcmd purge dst -n myQueue -t q -u admin imqcmd purge dst -n myTopic -t t -u admin
ブローカをシャットダウンしたあと、再起動するときに、古いメッセージを配信する必要がない場合は、-reset messages オプションを使用して、古いメッセージを消去します。たとえば、次のとおりです。
imqbrokerd -reset messages -u admin
これで、ブローカを再起動すると、送信先の消去に関する問題が解消されます。
ブローカクラスタでは、物理的送信先のインスタンスはクラスタ内の各ブローカに常駐します。これらの送信先はそれぞれ個別に消去する必要があります。
物理的送信先を破棄するには、destroy dst サブコマンドを使用します。次に示すのは、destroy dst サブコマンドの構文です。
destroy dst -t destType -n destName
このサブコマンドは、指定されたタイプと名前の物理的送信先のメッセージを破棄します。
例:
imqcmd destroy dst -t q -n myQueue -u admin
物理的送信先を破棄すると、その送信先のすべてのメッセージが消去され、ブローカからその送信先がなくなるため、操作を元に戻すことはできません。
デッドメッセージキューを破棄することはできません。
メッセージの持続ストアとして、ファイルベースのデータストアを使用している場合は、ディスク利用率を監視し、必要に応じてディスクを圧縮できます。
ファイルベースのメッセージストアは、保持される物理的送信先に応じてメッセージがディレクトリに格納されるように構成されています。各物理的送信先のディレクトリでは、大半のメッセージが可変長のレコードから成る 1 つのファイル、つまり可変長のレコードファイルに格納されます。断片化を減らすため、サイズが設定可能なしきい値を超えているメッセージは専用の個別のファイルに格納されます。
可変サイズのメッセージが保持されていて、その後レコードファイルから削除された場合、空きレコードが再利用されていないファイルに空白ができることがあります。
未使用の空きレコードを管理するために、コマンドユーティリティーには、物理的送信先ごとにディスク利用率を監視したり、利用率の低下時に空きディスク容量を再利用したりするためのサブコマンドが含まれています。
物理的送信先のディスク利用率を監視するには、次のようなコマンドを使用します。
imqcmd metrics dst -t q -n myQueue -m dsk -u admin
このコマンドでは、次のような情報が出力されます。
-------------------------------------- Reserved Used Utilization Ratio -------------------------------------- 806400 804096 99 1793024 1793024 100 2544640 2518272 98 |
サブコマンド出力の各列の意味は次のとおりです。
表 6–2 物理的送信先ディスク利用率のメトリックス
ディスク利用率のパターンは、特定の物理的送信先を使用しているメッセージングアプリケーションの特性によって異なります。また、物理的送信先との間でやり取りされる相対的なメッセージフローとメッセージの相対的なサイズに応じて、時間の経過とともに予約済みディスク容量が拡大することがあります。
メッセージの生成レートがメッセージの消費レートを上回る場合は、一般に、空きレコードが再利用され利用率が高くなります。ただし、メッセージの生成レートがメッセージの消費レートと同程度かそれより低い場合は、利用率は低いと予測できます。
一般に、予約済みディスク容量は安定化させ、利用率は高いまま維持させる必要があります。一般的に、システムが安定して、予約済みディスク容量がほぼ一定になり利用率が高い (75% を超える) 状態に達した場合には、未使用のディスク容量を再利用する必要はありません。システムが安定した状態になったが利用率が低い (50% を下回る) 場合は、ディスクを圧縮し、空きレコードが占有しているディスク容量を再利用できます。
データストアを圧縮する場合は、compact dst サブコマンドを使用します。次に示すのは、compact dst サブコマンドの構文です。
compact dst [-t destType -n destName]
このサブコマンドは、特定のタイプと名前の物理的送信先に対応するファイルベースのデータストアを圧縮します。送信先のタイプと名前が指定されていない場合は、すべての送信先が圧縮されます。圧縮する前に、物理的送信先を停止する必要があります。
予約済みのディスク容量が時間の経過とともに増え続けている場合は、送信先メモリーの制限プロパティーと制限動作を設定して送信先のメモリー管理を設定し直す必要があります (表 15–1 を参照)。
送信先を停止します。
imqcmd pause dst -t q -n myQueue -u admin |
ディスクを圧縮します。
imqcmd compact dst -t q -n myQueue -u admin |
物理的送信先を再開します。
imqcmd resume dst -t q -n myQueue -u admin |
送信先のタイプと名前が指定されなかった場合、これらの操作はすべての物理的送信先に対して実行されます。
デッドメッセージキュー mq.sys.dmq は、ブローカとブローカのその他の物理的送信先のデッドメッセージを保持する、システムで生成された物理的送信先です。デッドメッセージキューは、監視、システムの効率性の調整、トラブルシューティングに使用するツールです。「デッドメッセージ」の定義と、デッドメッセージキューの概要については、『 Message Queue 技術の概要』を参照してください。
ブローカは起動時に自動的にデッドメッセージキューを作成します。ブローカは処理できないメッセージ、または生存期間を過ぎたメッセージを、キューに配置します。さらに、その他の物理的送信先が廃棄したメッセージの保持にデッドメッセージキューを使用することもあります。デッドメッセージキューを使用することで、システムのトラブルシューティングに役立つ情報を得ることができます。
デフォルトでは、物理的送信先は、デッドメッセージキューを有効に設定しています。物理的送信先がデッドメッセージキューを使用しないように設定できます。あるいは物理的送信先プロパティー useDMQ を設定して有効にすることもできます。
次の例では、デフォルトでデッドメッセージキューを使用する、myDist と呼ばれるキューが作成されます。
imqcmd create dst -n myDist -t q
次の例では、同じキューに対してデッドメッセージキューの使用が無効になります。
imqcmd update dst -n myDist -t q -o useDMQ=false
ブローカ上の自動作成されたすべての物理的送信先で、デッドメッセージキューの使用を有効にしたり、imq.autocreate.destination.useDMQ ブローカプロパティーを設定して、デッドメッセージキューの使用を無効にしたりできます。
Message Queue コマンドユーティリティー (imqcmd) を使用して、デッドメッセージキューをほかのキューと同じように管理できますが、いくつかの相違点があります。たとえば、デッドメッセージキューはシステムで生成されるため、作成、停止、破棄の操作は行えません。さらに、表 6–3 に示すように、デッドメッセージキューのデフォルト値は通常のキューと異なる場合があります。
デッドメッセージキューは、ほかのキューの設定と同様に設定しますが、特定の物理的送信先のプロパティーは適用されません。あるいは別のデフォルト値が指定されます。表 6–3 にデッドメッセージキューが独自の方法で処理するキュープロパティーを一覧表示しています。
表 6–3 標準の物理的送信先プロパティーのデッドメッセージキューの処理
ブローカはメッセージ全体をデッドメッセージキューに配置できます。あるいはヘッダーとプロパティーデータのみを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。
デッドメッセージキューのサイズを減らし、デッドメッセージを復元する予定がない場合は、imq.destination.DMQ.truncateBody ブローカプロパティーを true に設定することを検討してください。
imqcmd update bkr -o imq.destination.DMQ.truncateBody=true
これにより、メッセージ本文が破棄され、ヘッダーとプロパティーデータのみが残されます。
デッドメッセージのロギングは、デフォルトでは無効になっています。デッドメッセージのロギングを有効にすると、ブローカが次のイベントを記録するようになります。
ブローカがデッドメッセージキューにメッセージを移動する
ブローカがデッドメッセージキューとデッドメッセージキューを使用していない物理的送信先からメッセージを破棄する
物理的送信先が制限に達する
次のコマンドでは、デッドメッセージのロギングを有効にしています。
imqcmd update bkr -o imq.destination.logDeadMsgs=true
デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理的送信先に適用されます。物理的送信先の個々については、ロギングを有効または無効に設定できません。