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_getredelivered

受信されたが受信確認されていないメッセージであるかどうかを示す値を返します。

パラメータ
項目 説明 備考
1 メッセージ ID VARCHAR(128)。メッセージ ID は、ml_qa_createmessage または ml_qa_getmessage から取得できます。
戻り値

再配信のステータスを示す BIT 型の値。1 はメッセージが再配信中であることを示し、0 は再配信中ではないことを示します。

備考

受信されたが受信確認されていないメッセージは、再配信される場合があります。たとえば、メッセージは受信されたものの、メッセージを受信したアプリケーションがメッセージの内容の処理を完了する前にクラッシュした場合などです。このような場合には、メッセージは再配信とマーク付けされて、メッセージの処理が完了していない可能性があることを示す警告が受信側に送信されます。

たとえば、次のような手順を経てメッセージが受信されるとします。

  1. 非トランザクション志向の QAnywhere Manager を使用するアプリケーションがメッセージを受信します。

  2. このアプリケーションは、T1 というデータベース・テーブルにメッセージの内容とメッセージ ID を書き込み、変更をコミットします。

  3. アプリケーションがメッセージの受信を確認します。

手順 1 と 2、または手順 2 と 3 の間でアプリケーションに障害が発生した場合は、アプリケーションの再起動時にメッセージが再配信されます。

手順 1 と 2 の間で障害が発生した場合は、手順 2 と 3 を実行してメッセージを再配信してください。手順 2 と 3 の間で障害が発生した場合は、メッセージはすでに処理されているので、メッセージの確認のみ必要です。

アプリケーションの障害時に何が起きたかを特定するには、アプリケーションで ml_qa_getredelivered を呼び出して、メッセージがすでに再配信されていたかどうかをチェックします。テーブル T1 で検索する必要があるのは、再配信されるメッセージだけです。アプリケーションで障害が発生することはほとんどないので、この方法は、受信したメッセージのメッセージ ID にアプリケーションからアクセスして、メッセージがテーブル T1 に格納されているかどうかをチェックするよりも効率的です。

このヘッダは、メッセージの受信後からロールバックまたはコミットが行われるまでの間に読み込むことができます。ロールバックまたはコミットが行われた後で読み込むことはできません。

参照

次の例では、メッセージを受信し、そのメッセージが以前に配信されたが受信されていなかった場合に、メッセージ ID をデータベース・サーバ・メッセージ・ウィンドウに出力します。

begin
    declare @msgid varchar(128);
    declare @redelivered bit;
    set @msgid = ml_qa_getmessage( 'myaddress' );
    set @redelivered = ml_qa_getredelivered( @msgid );
    if @redelivered = 1 then
        message 'message with message ID ' || @msgid || ' has been redelivered';
    end if;
    commit;
end