Hitachi

OpenTP1 Version 7 OpenTP1 メッセージキューイング機能 TP1/Message Queue プログラム作成の手引


13.5.2 トリガが設定されたキューからのメッセージ取り出し

トリガを使用するアプリケーションを設計するときは,トリガモニタアプリケーションによってアプリケーションが開始されてから,追加メッセージがアプリケーションキューで利用できるようになるまでに遅延があることに注意してください。このことは,トリガイベントを発生させたメッセージがほかのメッセージよりも先にコミットされる場合に発生します。

メッセージが到着する時間を待つには,トリガ条件が設定されたキューからMQGET命令を使用してメッセージを取り出すときに待ち合わせオプションを設定します。メッセージが登録されてから登録命令がコミットされるまでの時間よりも,十分に余裕のある時間をWaitIntervalフィールドに設定してください。リモートキューマネジャからメッセージが到着する場合には,次に示す項目の影響を受けます。

待ち合わせオプションを指定するMQGET命令の使用方法については,トランザクションを記述する場合を参考にしてください。ここでは,トリガタイプfirstのキューにトランザクション内でメッセージが登録されたとします。このイベントでキューマネジャはトリガメッセージを生成します。追加の登録がほかのトランザクション内で発生しても,追加のトリガイベントは発生しません。これは,アプリケーションキューのメッセージの数が0から1になるわけではないためです。最初のトランザクションがロールバックされ,第2のトランザクションがコミットされると,トリガメッセージはまた生成されます。つまり,最初のトランザクションがロールバックされるときにトリガメッセージが生成されます。第2のメッセージがコミットされるまでに遅延がある場合には,アプリケーションで待ち合わせるようにしてください。

depthのトリガタイプでは,関連するすべてのメッセージを最後にコミットするときでも遅延が発生します。TriggerDepth属性に2が設定されているとします。二つのメッセージがキューに到着するとき,二つ目のメッセージでトリガメッセージが生成されます。そして,二つ目のメッセージが最初にコミットされるときに,トリガメッセージが利用できるようになります。トリガモニタアプリケーションは,サーバアプリケーションを開始しますが,最初のメッセージがコミットされるまでは第2のメッセージだけしかアプリケーションで取り出しできません。そのため,アプリケーションは最初のメッセージが利用できるようになるまで待ち合わせなければなりません。

待ち合わせ時間が経過したときに取り出せるメッセージがない場合は,終了するようにアプリケーションを設計してください。一つ以上のメッセージが連続して到着する場合には,処理するアプリケーションを再度開始するようにしてください。アプリケーションをむだに動作させることで不要なリソースが消費されるのを防止できます。