BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   BEA Tuxedo /Q コンポーネント   |   先頭へ   |   前へ   |   次へ   |   目次

 


キュー・スペースとキューの作成

ここでは、qmadmin(1) の 3 つのコマンドについて説明します。これらのコマンドは、BEA Tuxedo /Q コンポーネントのリソースを設定するために使用します。APPQ_MIB 管理情報ベース (MIB) を使用すると、BEA Tuxedo /Q をプログラムで管理できるようになります。MIB の詳細については、APPQ_MIB(5) のリファレンス・ページを参照してください。

qmadmin のコマンドの使用方法

qmadmin のほとんどの主なコマンドでは、位置パラメータが使用されています。コマンドの呼び出し時に、コマンド行に位置パラメータ (オプションの前にダッシュ (-) が付かないパラメータ) が指定されていない場合、必要な情報を入力するように qmadmin で要求されます。

汎用デバイス・リストのエントリの作成 (crdl)

汎用デバイス・リスト (UDL) は、BEA Tuxedo で制御される VTOC ファイルです。このファイルは、BEA Tuxedo を実行するマシンに物理的な記憶空間をマッピングします。UDL のエントリは、キューとキュー・スペースのメッセージが格納されるディスク領域を指定します。BEA Tuxedo はその領域への入出力を管理します。BEA Tuxedo の新規インストールの一部としてキュー機能がインストールされる場合、コンフィギュレーション・ファイルの初回のロード時に、tmloadcf(1) によって UDL が生成されます。

キュー・スペースを作成する前に、UDL にそのキュー・スペースのエントリを作成する必要があります。次は、コマンドの例です。

# まず、/Q 管理インターフェイス qmadmin を呼び出します。
# QMCONFIG 変数は、UDL が置かれる既存のデバイスを
# 指定します。
QMCONFIG=/dev/rawfs qmadmin
# 次に、デバイス・リストのエントリを作成します。
crdl /dev/rawfs 50 500
# 上記のコマンドは、ブロック 50 で開始される物理ページを 500 個
# 確保します。
# UDL に以前にリストされたエントリがない場合、
# オフセット (ブロック番号) として 0 を使用します。

既存の BEA Tuxedo UDL にエントリを追加する場合は、QMCONFIG 変数の値には TUXCONFIG で指定されたパス名と同じ値を指定する必要があります。qmadmin を一度呼び出したら、新しいエントリを作成する前に、lidl コマンドを実行してどの領域を使用できるのかを確認します。

キュー・スペースの作成 (qspacecreate)

キュー・スペースでは、IPC 資源が使用されます。そのため、キュー・スペースを定義する場合は、共用メモリ・セグメントとセマフォを割り当てることになります。前述のように、このコマンドを使用する簡単な方法はプロンプトを表示することです。また、APPQ_MIB(5)T_APPQSPACE クラスを使用して、キュー・スペースを作成することもできます。プロンプトは以下の順で表示されます。

> qspacecreate
Queue space name:myqueuespace
IPC Key for queue space: 230458
Size of queue space in disk pages: 200
Number of queues in queue space: 3
Number of concurrent transactions in queue space: 3
Number of concurrent processes in queue space: 3
Number of messages in queue space: 12
Error queue name:errq
Initialize extents (y, n [default=n]):
Blocking factor [default=16]: 16

このプログラムでは、最後の 3 行を除くすべてのプロンプトに値を入力する必要があります。この例からわかるように、最後の 2 つのプロンプトではデフォルト値が使用されています。error queue name の名前はほとんどの場合に必要ですが、必須ではありません。ここで名前を指定した場合は、qcreate コマンドを使用してエラー・キューを作成する必要があります。error queue name の名前が指定されていないと、通常は (たとえば、再試行回数の上限値に達した場合などに) エラー・キューに送られるメッセージは、永続的に失われることに注意してください。

共用メモリの予約領域は、キュー・スペース内のすべてのキューの永続的ではないメッセージを格納するために使用されます。プログラムでは、この予約領域のサイズを指定するように要求されません。永続的ではない (メモリ・ベースの) メッセージが必要な場合は、qspacecreate コマンド行に -n オプションを入力して、メモリ領域のサイズを指定する必要があります。

IPC キーには、ほかの IPC 資源の要件と競合しない値を指定します。この値は 32,768 より大きく 262,143 未満にします。

キュー・スペースのサイズ、キューの数、および一度に登録できるメッセージの数は、アプリケーションのニーズによって決定されます。UDL エントリで指定されたページ数より大きいサイズを指定することはできません。また、これらのパラメータに関連して、キュー・スペース内の個々の queue capacity パラメータを検討する必要があります。これらのパラメータを使用すると、(a) キューに登録できるメッセージの上限値を設定し、(b) キューに登録されたメッセージの数がしきい値に達したときに実行するコマンドの名前を指定できます。キュー・スペースに同時に登録できるメッセージの数を小さくすると、キューのしきい値に達しなくなります。

並列トランザクションの数を計算するには、以下の各項目を 1 つのトランザクションとしてカウントします。

クライアント・プログラムが tpenqueue を呼び出す前にトランザクションを開始する場合、キュー・スペースに同時にアクセスするクライアント数だけカウント数を増やします。最悪のケースは、すべてのクライアントがキュー・スペースに同時にアクセスすることです。

同時実行プロセスの数としては、このキュー・スペースを使用するグループの TMQUEUE サーバ、TMQFORWARD サーバ、またはTMS_QM サーバごとに 1、余裕として 1 をカウントします。

qspacecreate コマンドの使用時に、キュー・スペースを初期化するように設定できます。また、キュー・スペースを初めてオープンするときに、qopen コマンドで初期化するように設定することもできます。

キューの作成 (qcreate)

使用するキューは、qmadminqcreate コマンドで作成する必要があります。まず、qopen コマンドでキュー・スペースをオープンします。キュー・スペース名が指定されていない場合は、qopen で名前を入力するように求められます。APPQ_MIB(5)T_APPQ クラスを使用して、キューを作成することもできます。

qcreate のプロンプトは、次の順で表示されます。

> qcreate
Queue name:service1
Queue order (priority, time, fifo, lifo):fifo
Out-of-ordering enqueuing (top, msgid, [default=none]):none
Retries [default=0]: 2
Retry delay in seconds [default=0]: 30
High limit for queue capacity warning (b for bytes used, B for
blocks used,
% for percent used, m for messages [default=100%]): 80%
Reset (low) limit for queue capacity warning [default=0%]: 0%
Queue capacity command:
No default queue capacity command
Queue 'service1' created

これらすべてのプロンプト (queue name のプロンプト以外) では、入力を省略できます。queue name が指定されていない場合、プログラムで警告メッセージが表示され、再度プロンプトが表示されます。これ以外のパラメータについてはプログラムでデフォルト値が用意されており、デフォルト値の使用を通知するメッセージが表示されます。

デフォルトの配信オプションやメモリのしきい値のオプションを入力するようには求められません。デフォルトの配信オプションを使用すると、配信モードが指定されていないメッセージを永続 (ディスク・ベースの) ストレージに配信するか、または非永続 (メモリ・ベースの) ストレージに配信するかを指定できます。メモリのしきい値オプションでは、非永続メモリのしきい値に達したときに、コマンドを実行するための値を指定できます。これらのオプションを使用するには、qcreate コマンド行で -d-n をそれぞれ指定する必要があります。

キューの順序の指定

メッセージは、このパラメータで指定された順序でキューに登録され、キューからの取り出しに順序付け条件が設定されている場合を除き、キューの先頭から取り出されます。priorityexpirationtime がキューの順序付け条件として選択されている場合、メッセージは TPQCTL 構造体の値に従ってキューに挿入されます。順序付け条件を組み合わせて指定する場合は、最も重要な条件を最初に指定します。複数指定する場合は、カンマ (,) で区切ります。fifo または lifo (この 2 つは、相互に排他的) が指定されている場合は、この値を最後に指定します。パラメータが指定された順序によって、キューの順序付け条件が決定されます。たとえば、priority, fifo と指定されている場合、キューはメッセージの優先順位に従って取り出され、同じ優先順位のメッセージの場合は先入れ先出しで取り出されます。

順序を無視したキュー登録

管理者が順序を無視したキュー登録を有効にした場合、つまりプロンプトで top または msgid が選択されている場合、プログラマはキューの先頭、または msgid で識別されるメッセージの前にメッセージが入るように指定できます。その場合、tpenqueue 呼び出しの TPQCTL 構造体の値を使用してください。このオプションは、よく検討してから使用します。一度このオプションを設定すると、それを変更するにはキューを破棄して、再度作成する必要があります。

再試行パラメータの指定

待機メッセージ機能の通常の動作では、メッセージをキューから取り出すトランザクションがロールバックされると、メッセージがキューに戻されます。そのメッセージがキューの先頭に到達すると、再度キューから取り出されます。必要な再試行の回数、および次の再試行までの遅延時間を指定できます。キューから取り出されたメッセージが再試行のためにキューに戻されると、キューの順序付けは遅延時間 (秒単位) だけ中断されます。この間、メッセージをキューから取り出すことはできません。

再試行回数のデフォルト値は 0 です。これは、再試行が一度も行われないことを示します。再試行回数の上限値に達すると、メッセージがキュー・スペースのエラー・キューに移されます。その場合、エラー・キューが指定され、作成されていることが前提です。エラー・キューが存在しない場合は、メッセージは破棄されます。

遅延時間には、秒単位が使用されます。メッセージ・キューがすぐにいっぱいになり、キューに戻されたメッセージがすぐに先頭に達する場合、遅延要因を作成して CPU サイクルを節約することができます。再試行に関しては、使用するアプリケーションでのこれまでの経験に基づいて決定します。特定のキューに対応付けられたサービスに大量の競合がある場合、一時的な問題が多数発生します。このような問題に対処するには、再試行回数に大きな値を指定します。この値は、主観的なものです。次の再試行を行うまでの時間も同じです。ロールバックされたトランザクションで通知される問題が解消されないものである場合、再試行回数を 0 にしてメッセージを直ちにエラー・キューに移動します。これは、TMQFORWARD で -d オプションを指定する場合の動作とよく似ています。ただし、長さが 0 以外の異常終了メッセージは、キューから削除するために TMQFORWARD で自動的に受信される点が異なります。

キューの容量の上限

qcreate コマンドには、キューの管理を部分的に自動化する 3 つのパラメータがあります。これらのパラメータは、上下限のしきい値を設定します。しきい値は、バイト数、ブロック数、メッセージ数、またはキューの容量に対する割合 (パーセント) で表すことができます。これにより、しきい値の上限に達したときに実行されるコマンドを指定できます。実際には、コマンドはしきい値の上限に達したときに 1 度だけ実行され、しきい値の上限より先に下限に達しない限り、再度実行されることはありません。

次は、これらのパラメータの使い方の 2 つの例です。

High limit for queue capacity warning (b for bytes used, B for 
blocks used, % for percent used, m for messages [default=100%]): 80%
Reset (low) limit for queue capacity warning [default=0%]: 10%
Queue capacity command:/usr/app/bin/mailme myqueuespace service1

この例は、しきい値の上限としてディスク・ベースのキュー容量の 80% を設定し、キューの 80% が使用されたときにコマンドが実行されるように指定しています。このコマンドは、しきい値に達したときにメール・メッセージを送信するように作成されたスクリプトです。(myqueuespace および service1 は、このコマンドに対する仮定的な引数です。キューがいっぱいになったことが一度通知されると、その状況に対応するための操作を行うことができます。警告メッセージを再度受け取るのは、キューのロードが容量の 10% 以下になり、もう一度 80% に上がった場合だけです。永続的ではない (メモリ・ベースの) キューの容量を管理するために、qcreate コマンドの -n オプションを使用して、しきい値を設定したり、コマンドが実行されるように設定することもできます。

注記 Windows マシンを使用している場合、qmadmin() セッションでコマンドを設定する方法の詳細については、「Windows 標準入出力」を参照してください。

2 番目の例は、もう少し自動化されていて、TMQFORWARD サーバの -e オプションを利用しています。

High limit for queue capacity warning (b for bytes used, B for 
blocks used, % for percent used, m for messages [default=100%]): 90%
Reset (low) limit for queue capacity warning [default=0%]: 0%
Queue capacity command:tmboot -i 1002

この例では、キューの予備の TMQFORWARD サーバとして SRVID=1002 が設定されていること、その CLOPT パラメータに -e オプションが指定されていることが前提となっています。また、サーバが起動していないこと、または起動している場合は、キューが空であることが検出されたためにサーバが自身をシャットダウンしたことも前提となっています。キューが容量の 90% に達したとき、tmboot コマンドが実行されて予備のサーバが起動します。-e オプションを使用すると、キューが空の場合にサーバが自身をシャットダウンします。この例では、既に起動しているサーバに対して不要な tmboot コマンドを起動しないために、しきい値の下限として 0% が設定されています。

この 3 つのオプションのデフォルト値は、100%、0%、およびコマンドなしです。

応答キューおよび異常終了キュー

キューの作成方法、およびキューの操作を行うためのパラメータの指定方法について説明してきました。これまで、メッセージが登録されるキューを作成する場合に、同じ名前のサービスでキューが処理されることが前提となっていました。キューは、ピア・ツー・ピア通信などほかの目的で使用される場合もあります。キュー作成時のパラメータは、キューの用途が異なっても同じものが使用されます。メッセージがサービス・キューに登録される際に使用される TPQCTL 構造体には、応答キューおよび異常終了キューの名前を指定するためのフィールドがあります。TMQFORWARD は、要求されたサービスに対して TMQFORWARD が呼び出した tpacall(3c) が正常終了したか異常終了したかを検出します。そして、これらのキューが管理者によって作成されてものである場合は、その応答を設定に応じてキューに登録します。応答キューまたは異常終了キューが存在しない場合は、サービスからの正常終了または異常終了の応答メッセージは削除されます。その場合、要求の発信元であるクライアントには、キューに入れられた要求の結果に関しては、何も通知されません。サービスから応答メッセージがない場合でも、応答キューが存在するときは、TMQFORWARD によって長さ 0 のメッセージがそのキューに登録されて、要求の発信元であるクライアントに結果が通知されます。

応答キューまたは異常終了キューを作成する場合は、これらのキューからのメッセージの取り出しは、事前に登録した要求に関する情報を求めているクライアント・プロセスによって行われることに注意してください。このようなメッセージをキューから取り出す一般的な方法は、そのメッセージに対応付けられている msgid (メッセージ識別子) または corrid (相関識別子) を使用することです。これは、キューの先頭からメッセージを取り出す方法と対照的です。そのため、キューの順序付け条件は、あまり意味を持ちません。その場合、fifo を設定しておけば十分です。retries パラメータおよび retry delay パラメータは、応答キューの場合は意味がないので、デフォルト値を使用してください。queue capacity のしきい値とコマンドは、応答キューでも利用できます。これらを使用して管理者に警告を通知し、管理者が対応できるようにすると便利です。

エラー・キュー

エラー・キューは、システムのキューです。qspacecreate プロンプトの 1 つで、キュー・スペースのエラー・キューの名前を入力するように求められます。指定された名前のエラー・キューが実際に作成されている場合、そのエラー・キューに再試行回数の上限に達したサービス・キューのメッセージが移されます。エラー・キューのメッセージは、qmadmin のコマンドを使用して手動で処理することも、APPQ_MIB MIB を使用して自動化された方法で処理することもできます。このようなエラー・キューの管理方法は、管理者が決定します。エラー・キューには、queue capacity パラメータを使用することができます。ただし、qname を除くほかのすべての qcreate のパラメータは使用できません。

注記 エラー・キューとサービス異常終了キューには、同じキューを使用しないことをお勧めします。同じキューを使用すると、アプリケーションの管理が難しくなり、クライアントが管理者の領域にまでアクセスすることも起こり得ます。

 

先頭へ戻る 前のトピックへ 次のトピックへ