Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » QAnywhere » QAnywhere リファレンス » QAnywhere SQL API リファレンス » メッセージの管理

 

ml_qa_getmessagetimeout

指定されたタイムアウト期間だけ待機してから、キューに登録されている、指定されたアドレスを持つメッセージのうち、次に取り出せるもののメッセージ 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