指定されたタイムアウト期間だけ待機してから、キューに登録されている、指定されたアドレスを持つメッセージのうち、次に取り出せるもののメッセージ ID を返します。
項目 | 説明 | 備考 |
---|---|---|
1 | アドレス | VARCHAR(128) |
2 | タイムアウト (ミリ秒単位) | INTEGER |
VARCHAR(128) 型の メッセージ ID。
タイムアウト時間内に、このアドレスを持つキューに登録されたメッセージがない場合は、NULL を返します。
指定された QAnywhere メッセージ・アドレス宛ての待機中のメッセージがあるかどうかを同期的にチェックするには、このストアド・プロシージャを使用します。指定された QAnywhere アドレス宛てのメッセージが発生した場合に、非同期で SQL プロシージャを呼び出すには、Listener を使用します。
返されるメッセージ ID に対応するメッセージが受信されたとみなされるのは、現在のトランザクションがコミットされた後です。受信がコミットされたメッセージは、このストアド・プロシージャやいかなる QAnywhere API でも受信することができません。同様に、現在のトランザクションがロールバックされると、メッセージが受信されていないことを意味します。このため、以降の ml_qa_getmessage の呼び出しで同じメッセージ ID が返される可能性があります。
受信されたメッセージのプロパティと内容は、現在のトランザクションに対してコミットまたはロールバックが実行されるまでの間、各種の ml_qa_get ストアド・プロシージャを使用して読み込むことができます。現在のトランザクションに対してコミットまたはロールバックが実行された時点で、そのメッセージ・データは読み込めなくなります。コミットを実行する前に、メッセージ内の必要なデータを表形式のデータとして、または SQL 変数に保存してください。
次の例では、アドレス myaddress に送信されたすべてのメッセージの内容をデータベース・サーバ・メッセージ・ウィンドウに出力します。メッセージが受信されなかった場合は、データベース・サーバ・メッセージ・ウィンドウを 10 秒ごとに更新します。
begin declare @msgid varchar(128); loop set @msgid = ml_qa_getmessagetimeout( 'myaddress', 10000 ); if @msgid is null then message 'waiting for a message...'; else message 'a message with content ' || ml_qa_gettextcontent( @msgid ) || ' has been received'; commit; end if; end loop; end |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |