次の項では、Oracle Tuxedo Message Queue製品の概要を説明します。
Oracle Tuxedo Message Queue (OTMQ)コンポーネントは、Oracle Tuxedoのキューイング・サービスを改善および拡張します。Oracle Tuxedo /Qコンポーネントの既存のキューイング機能に加え、OTMQでは、信頼性の高いメッセージ配信、同期/非同期メッセージング、パブリッシュ/サブスクライブ、メッセージ・フィルタリング、動的キュー・エイリアス(ネーミング)、ジャーナルといった、より豊富なキューイング機能が提供されます。また、OTMQはOracle Tuxedoインフラストラクチャに基づいて実装されているため、トランザクション、セキュリティ、スケーラビリティおよびHAがサポートされます。
Oracle OTMQには、その動作を定義する複数の属性があります。詳細は、『Oracle Tuxedo Message Queueコマンド・リファレンス・ガイド』のtmqadmin()
に関する項を参照してください。
キュー・タイプは、キューのライフ・サイクルによって次のように分けられます。
永続キューは、事前に割り当てる必要があります。永続キューには、永続または一時のアクティブ・プロパティがあります。永続アクティブ・キューは、記憶域割当て制限を超過しないかぎり、それにアタッチしているアプリケーションがなくても、常にメッセージを受信して格納できます。一時アクティブ・キューは、アプリケーションによってアタッチされている場合にのみ、メッセージを受信して格納できます。永続キューは、tmqadmin()
のqcreate
コマンドによって作成されます。
永続キューには、作成時に次のタイプのうちの1つを指定します。
プライマリ・キューは、ユーザー・プロセスのメイン・メールボックスとして動作し、別のプロセスからのメッセージを受信します。アタッチできるのは、1つのキュー・クライアントのみです。アプリケーションで保持できるのは、1つのプライマリ・キューのみですが、別のタイプのキューとの関連付けが可能です。
セカンダリ・キューは、ユーザー・プロセスの代替メールボックスとして動作し、メッセージを受信します。アプリケーションは、アタッチすることでセカンダリ・キューを所有します。アプリケーションで、セカンダリ・キューの所有者であるプライマリ・キューにアタッチすると、それと同時に、そのアプリケーションは自動的にセカンダリ・キューにもアタッチされます。アプリケーションがそのプライマリ・キューからデタッチすると、関連するすべてのセカンダリ・キューもデタッチされます。
マルチリーダー・キューは事前割当てです。同時に複数のキュー・クライアントがそれにアタッチできます。
無制限キューの動作は、従来のTuxedo /Qキューとまったく同じです。アプリケーションでは、無制限キューからデキューするために無制限キューにアタッチする必要はありません。
一時キューは、実行時にアプリケーションでアタッチをリクエストしたときに作成されます。一時キューにアタッチしているプロセスはそのキューの所有者となり、他のプロセスはそのキューにアタッチすることも、キューからメッセージを受信することもできません。アプリケーションが一時キューからデタッチすると、そのキューに残されたすべてのメッセージは削除されます。一時キューの数および範囲は、tmqadmin()のqspacecreateコマンドで指定します。
Oracle OTMQでは、確実に受信者へメッセージを正常に配信できる、信頼性の高いメッセージ配信が提供されます。
詳細は、『Oracle Tuxedo Message Queueプログラミング・ガイド』の「リカバリ可能メッセージングの使用」を参照してください。
配信インタレスト・ポイント(DIP)は、メッセージ配信中のチェックポイントです。メッセージが指定したチェックポイントを通過すると、ACK通知メッセージが送信元アプリケーションに返信され、メッセージ配信のステータスが示されます。
Oracle OTMQでは、次のDIPがサポートされています。
tpqconfirmmsg(3c)
コマンドを使用してACK通知を返信し、リカバリ不可メッセージが明示的に確認されたときtpqconfirmmsg(3c)
を使用して明示的に確認されたときOracle OTMQアプリケーションでは、次に示すモードでメッセージをエンキュー/送信できます。
アプリケーションでは、ターゲットにメッセージを送信した後、確認応答があるまで待機します。メッセージが特定の配信インタレスト・ポイントに送信されるまで待つ、という選択もできます。
アプリケーションでは、メッセージ送信後の待機は行わず、明示的にtpdeqplus(3c)
を呼び出してACK通知メッセージを取得し、メッセージがターゲットに正常に配信されたことを確認します。
アプリケーションでは、メッセージ送信後の待機は行わず、確認メッセージも期待しません。このモードは、パフォーマンスを重視するケースのためのものです。
配信不可メッセージ・アクション(UMA)は、メッセージの送信者が確認応答の通知の失敗を受信したときのアクションです。
信頼性の高いメッセージ配信が有効の場合、UMAは、メッセージのSAF/DQF記憶域への格納に失敗したときのアクションです。
そうでない場合は、UMAは、メッセージの配信が失敗した場合のアクションです。
有効なOracle OTMQのUMAオプションを、次の表に示します。
メッセージは、キューに対して別の順序を指定しないかぎり、FIFOの順序でキューから読み出されます。また、Oracle OTMQでは、メッセージ・フィルタが提供され、それに定義した選択基準に一致するメッセージのみを読み取ることができます。詳細は、『Oracle Tuxedo Message Queueプログラミング・ガイド』の「フィルタの使用」を参照してください。
パブリッシュおよびサブスクライブ機能は、メッセージを、メッセージ・ブロードキャスト・ストリームからの受信情報に登録されている複数の受信者に送信します。それは、メッセージをキューイングするクライアントおよびサーバー内のイベントの非同期ルーティングです。
Oracle OTMQアプリケーションでは、標準のtpqpublish()
関数を使用してブロードキャスト・メッセージを送信できます。送信側アプリケーションでは、受信側プログラムの場所や数を知らなくてもブロードキャスト・メッセージを生成できます。
Oracle OTMQアプリケーションでは、最初にブロードキャスト・ストリームにサブスクライブすることで、選択的にブロードキャスト・メッセージを受信できます。メッセージ・ストリームを受信するには、受信側アプリケーションで、まずtpqsubscribe()
を使用してメッセージ・ストリームにサブスクライブします。その後、そのアプリケーションでブロードキャスト・メッセージが有効になり、標準のtpdeqplus()
関数を使用した処理により、受信者のキューに流れ込みます。
詳細は、『Oracle Tuxedo Message Queueプログラミング・ガイド』の「パブリッシュ/サブスクライブ」を参照してください。
ネーミングは、アプリケーションでキュー名のかわりにエイリアスでキューを参照できるようにする強力な機能です。ネーミングにより、アプリケーションが現在の環境構成の詳細から切り離され、システム管理者は、開発者にアプリケーションの変更を依頼することなしに構成を変更できるようになります。
詳細は、『Oracle Tuxedo Message Queueプログラミング・ガイド』の「ネーミングの使用」を参照してください。
Oracle OTMQでは、リカバリ可能と指定されたメッセージの格納にメッセージ・リカバリ・ジャーナル・キューが使用されます。
ローカルのキュー・スペース上のメッセージ・ジャーナル・キューは、ストア・アンド・フォワード(SAF)と呼ばれます。リモートのキュー・スペース上のメッセージ・ジャーナル・キューは、宛先キュー・ファイル(DQF)と呼ばれます。リカバリ可能メッセージが配信できなかった場合、SAFまたはDQFのいずれかに格納され、自動的にターゲットに再送されます。
配信不能キュー(DLQ)は、自動リカバリのために格納できなかった配信不可メッセージを格納するメモリー・ベースのメカニズムです。DLQと同様に、使用不能のレター・ジャーナル(DLJ)は、自動リカバリのために格納できなかった配信不可メッセージを格納するディスク・ベースのメカニズムです。
もう1つの補助的なジャーナル・キューが、事後確認ジャーナル(PCJ)です。受信者による確認の成功したリカバリ可能メッセージは、監査のためにPCJに書き込むことができます。
Oracle OTMQでは、これらのジャーナル・キューからメッセージをダンプするため、tpqreadjrn()
関数が提供されます。
詳細は、『Oracle Tuxedo Message Queueプログラミング・ガイド』の「リカバリ可能メッセージングの使用」を参照してください。
WSモードでは、リカバリ可能配信モードを使用して送信されるOTMQメッセージは、サーバー・システムへの接続が使用できない場合、ローカルのストア・アンド・フォワード(SAF)ジャーナル・ファイル(tmqsaf.jrn)に書き込まれます。
注意: | このWS SAF機能は、WSクライアントが「シングルコンテキスト」モードの場合にのみ使用可能です。詳細は、『Oracle Tuxedo関数リファレンス』のtpinit(3c) に関する項を参照してください。 |
OTMQのQSPACEは、64ビットのUNIXプラットフォームで、永続および非永続メッセージの両方で2Gのサイズ制限を超えることができます。
tmqadminで、サブコマンドの「crdl
」がQSPACE用の永続デバイスを作成します。このコマンドの最大値は2147483647で、これはシステムの変数で、単位はシステム・ブロック・サイズです。このため、永続QSpaceの最大サイズは、2147483647*ブロック(バイト)です。
tmqadmin->qspacecreate
コマンドには-nオプションがあり、このオプションは、キュー・スペース内のすべてのキューの非永続メッセージのために共有メモリー内に予約される領域のサイズを指定します。このサイズは、バイト(b)またはブロック(B)で指定でき、ブロック・サイズはディスクのブロック・サイズと同じです。qspacecreateコマンドの-nの引数となる「ブロック(B)」および「バイト(b)」は、どちらの最大値も2147483647です。ブロック(B)引数を使用する場合、予約される非永続メッセージの最大サイズは、2147483647*ブロックです。
注意: | 64ビット・プラットフォームのHPUXでは、hpux_ma.h の中で_TMSIGNLESHM が1に定義されており、これは、1つのプロセスが1つの共有メモリー・セグメントを作成し、それをアドレス空間にアタッチすることを表します。このため、tmqadminコマンドで2Gを超える共有メモリーを作成する場合は、Oracle Tuxedo環境変数のTM_ENGINE_TMSHMSEGSZ を、システムで定義されるSHMAX の値を超えない、より大きな値に設定します。 |
注意: | もう1つの環境変数TM_QM_NAPTIME があり、これはスレッドのスリープ時間をナノ秒で定義します。この変数の使用は、キューのデッド・ロック状態を検出するための時間間隔を拡張する可能性があることに注意してください。 |
Oracle Tuxedo APIのtpinit()
には、シングル・コンテキスト・モードとマルチコンテキスト・モードの2つの動作モードがあります。OTMQでは、アプリケーションで明示的にtpinit()
を呼び出しても、OTMQは自動的にはマルチコンテキスト・モードにはなりません。
アプリケーションでtpinit()
を呼び出さない場合、それに続くtpqattach()
の呼び出しでOTMQは自動的にマルチコンテキスト・モードになります。WSクライアントでは、マルチコンテキスト・モード関連の自動化は使用できません。
Oracle OTMQでは、キューイング・サービスのため、次に示すシステム・レベルのコンポーネントが提供されます。
TuxMsgQ()
Oracle OTMQのメッセージ・キュー・マネージャ・サーバー。キューイング・サービスをリクエストするプロセスにかわって、実際のメッセージのエンキュー/デキュー操作を行います。
TuxMQFWD()
Oracle OTMQのメッセージ・フォワーディング・サーバー。Oracle OTMQ Offline Trade Driverとも呼ばれ、オリジナルのキューイング操作がリカバリ可能配信モードを使用するように選択されている場合、または、操作が失敗し、メッセージが再配信のためにジャーナルに格納されている場合は、ジャーナルからターゲットのキューに自動的にメッセージを転送できます。
キューイング・サービスをサポートするため、Oracle OTMQでは、Oracle OTMQキュー・スペースを管理するX/OPEN XA準拠のリソース・マネージャ・インタフェースとして、新規のトランザクション・マネージャ・サーバーTMS_TMQMが提供されます。
基本的なキューイング・サービスばかりではなく、Oracle OTMQでは、お客様のための追加機能も提供されます。これらの機能をサポートするためのOracle OTMQのシステム・レベル・コンポーネントを次に示します。
TMQ_NA()
は、Oracle OTMQのネーミング・サーバーです。これにより、実行時のキューのエイリアス・バインディングおよびルックアップが可能となるネーミング・サービスが提供されます。TMQEVT()
は、Oracle OTMQのイベント・ブローカで、トピックがtpqpublish()
を使用してパブリッシュされたときのサブスクライバへの通知に使用されます。サブスクライバは、tpqsubscribe(3c)
を使用してトピックをサブスクライブします。TMQFORWARDPLUS()
は、メッセージ転送サーバーです。これは、後で処理するためにtpenqueue(3c)/tpenqplus(3c)
を使用して格納されているメッセージを転送します。アプリケーション管理者は、*SERVERS
セクションでこのサーバーをアプリケーション・サーバーとして指定することにより、アプリケーション・サーバーのメッセージ処理を自動化できます。Oracle OTMQは、従来のメッセージ・キュー製品であるOracle Message Queue (OMQ)との相互運用も可能です。メッセージ・レベルでの相互運用性を実現するためのOracle OTMQの2つのシステム・レベル・コンポーネントを次に示します。
TuxMsgQLD()
は、Oracle OTMQのリンク・ドライバ・サーバーです。これは、Oracle OTMQを別のメッセージング製品であるOracle Message Queue (OMQ)と相互運用するためのブリッジです。詳細は、『Oracle Tuxedo Message Queueリリース・ノート』の「相互運用性」を参照してください。TuxCls()
は、Oracle OTMQのクライアント・ライブラリ・サーバーです。これは、リモート・エージェントとして動作し、既存のOracle Message Queueクライアントにかわって、Oracle OTMQキュー・スペースおよびキューに基づくキューイング操作を実行します。詳細は、『Oracle Tuxedo Message Queueリリース・ノート』の「相互運用性」を参照してください。