Sun Java System Message Queue 3.7 UR1 管理ガイド

第 6 章 物理的送信先の管理

この章では、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”

物理的送信先を作成するときには、次の情報を指定する必要があります。

また、物理的送信先を更新する場合、プロパティーも設定できます。

物理的送信先の多くのプロパティーが、ブローカのメモリーリソースおよびメッセージフローに影響します。たとえば、物理的送信先に送信できるプロデューサの数、送信可能なメッセージの数とサイズ、および物理的送信先の制限に達したときにブローカが行う応答を指定できます。この制限は、ブローカの設定プロパティーによって制御されるブローカ全体の制限に似ています。

次のプロパティーは、キューの送信先とトピックの送信先のいずれにも使用します。

次のプロパティーは、キューの送信先にのみ使用します。

物理的送信先のプロパティーについての詳細は、第 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 章「物理的送信先のプロパティーのリファレンス」を参照してください。

物理的送信先の typeisLocalOnly プロパティーを更新する場合、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 物理的送信先ディスク利用率のメトリックス

メトリックス 

説明 

Reserved (予約済み)

すべてのレコードによって使用されるディスク容量 (バイト単位)。アクティブメッセージを保持するレコードと再利用可能な空きレコードが含まれます。 

Used (使用中)

アクティブメッセージを保持しているレコードによって使用されるディスク容量 (バイト単位)。 

Utilization Ratio (利用率)

使用されているディスク容量を予約済みのディスク容量で割ったときの商。割合が高いほど、アクティブメッセージを保持するためにより多くのディスク容量が使用されています。

未使用の物理的送信先ディスク容量の再利用

ディスク利用率のパターンは、特定の物理的送信先を使用しているメッセージングアプリケーションの特性によって異なります。また、物理的送信先との間でやり取りされる相対的なメッセージフローとメッセージの相対的なサイズに応じて、時間の経過とともに予約済みディスク容量が拡大することがあります。

メッセージの生成レートがメッセージの消費レートを上回る場合は、一般に、空きレコードが再利用され利用率が高くなります。ただし、メッセージの生成レートがメッセージの消費レートと同程度かそれより低い場合は、利用率は低いと予測できます。

一般に、予約済みディスク容量は安定化させ、利用率は高いまま維持させる必要があります。一般的に、システムが安定して、予約済みディスク容量がほぼ一定になり利用率が高い (75% を超える) 状態に達した場合には、未使用のディスク容量を再利用する必要はありません。システムが安定した状態になったが利用率が低い (50% を下回る) 場合は、ディスクを圧縮し、空きレコードが占有しているディスク容量を再利用できます。

データストアを圧縮する場合は、compact dst サブコマンドを使用します。次に示すのは、compact dst サブコマンドの構文です。

compact dst [-t destType -n 
destName]

このサブコマンドは、特定のタイプと名前の物理的送信先に対応するファイルベースのデータストアを圧縮します。送信先のタイプと名前が指定されていない場合は、すべての送信先が圧縮されます。圧縮する前に、物理的送信先を停止する必要があります。

予約済みのディスク容量が時間の経過とともに増え続けている場合は、送信先メモリーの制限プロパティーと制限動作を設定して送信先のメモリー管理を設定し直す必要があります (表 15–1 を参照)。

Procedure未使用の物理的送信先ディスク容量を再利用する

  1. 送信先を停止します。


    imqcmd pause dst -t q -n myQueue -u admin
  2. ディスクを圧縮します。


    imqcmd compact dst -t q -n myQueue -u admin
  3. 物理的送信先を再開します。


    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 標準の物理的送信先プロパティーのデッドメッセージキューの処理

プロパティー 

デッドメッセージキューによる固有の処理 

limitBehavior

デッドメッセージキューのデフォルト値は、REMOVE_OLDEST です。その他のキューのデフォルト値は REJECT_NEWEST です。デッドメッセージキューでは、フロー制御はサポートされません。

localDeliveryPreferred

デッドメッセージキューに適用されません。 

maxNumMsgs

デッドメッセージキューのデフォルト値は、1000 です。その他のキューのデフォルト値は -1 (無制限) です。

maxNumProducers

デッドメッセージキューに適用されません。 

maxTotalMsgBytes

デッドメッセージキューのデフォルト値は、10M バイトです。その他のキューのデフォルト値は -1 (無制限) です。

isLocalOnly

ブローカクラスタで、デッドメッセージキューは常にグローバルの物理的送信先になり、このプロパティーは永続的に false に設定されます。

メッセージの内容

ブローカはメッセージ全体をデッドメッセージキューに配置できます。あるいはヘッダーとプロパティーデータのみを残して、メッセージ本体の内容を破棄できます。デフォルトでは、デッドメッセージキューはメッセージ全体を格納します。

デッドメッセージキューのサイズを減らし、デッドメッセージを復元する予定がない場合は、imq.destination.DMQ.truncateBody ブローカプロパティーを true に設定することを検討してください。

imqcmd update bkr -o imq.destination.DMQ.truncateBody=true

これにより、メッセージ本文が破棄され、ヘッダーとプロパティーデータのみが残されます。

デッドメッセージのロギングの有効化

デッドメッセージのロギングは、デフォルトでは無効になっています。デッドメッセージのロギングを有効にすると、ブローカが次のイベントを記録するようになります。

次のコマンドでは、デッドメッセージのロギングを有効にしています。

imqcmd update bkr -o imq.destination.logDeadMsgs=true

デッドメッセージのロギングは、デッドメッセージキューを使用するすべての物理的送信先に適用されます。物理的送信先の個々については、ロギングを有効または無効に設定できません。