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

SQL Anywhere 11.0.1 (Deutsch) » QAnywhere » QAnywhere-Referenz » QAnywhere SQL-API-Referenz » Nachrichtenverwaltung

 

ml_qa_getmessagetimeout

Wartet die angegebene Zeitspanne ab, um die Nachricht-ID der nächsten Nachricht zurückzugeben, die für die angegebene Adresse in der Warteschlange steht.

Parameter
Element Beschreibung Bemerkungen
1 Adresse VARCHAR(128)
2 Zeitüberschreitung in Millisekunden INTEGER
Rückgabewert

Die Nachricht-ID als VARCHAR(128)

Gibt NULL zurück, wenn für diese Adresse innerhalb der Zeitüberschreitungsspanne keine Nachricht in der Warteschlange steht.

Bemerkungen

Verwenden Sie diese gespeicherte Prozedur, um zu prüfen, ob eine Nachricht auf die angegebene QAnywhere-Nachrichtenadresse wartet. Verwenden Sie den Listener, wenn eine SQL-Prozedur asynchron aufgerufen werden soll, sobald eine Nachricht für eine angegebene QAnywhere-Adresse verfügbar ist.

Die Nachricht, die der zurückgeschickten Nachricht entspricht, wird als nicht empfangen eingestuft, bis die laufende Transaktion festgeschrieben ist. Nachdem der Empfang bestätigt wurde, kann die Nachricht von dieser oder einer anderen QAnywhere-API nicht nochmals empfangen werden. Ein Zurücksetzen der aktuellen Transaktion wiederum bedeutet, dass die Nachricht nicht empfangen wurde, daher können nachfolgende Aufrufe von ml_qa_getmessage dieselbe Nachricht-ID zurückgeben.

Die Eigenschaften und Inhalte der empfangenen Nachrichten können mit den gespeicherten Prozeduren der Serie ml_qa_get gelesen werden, bis ein Festschreiben oder ein Zurücksetzen der aktuellen Transaktion erfolgt. Wenn ein Festschreiben oder ein Zurücksetzen der aktuellen Transaktion erfolgt, sind die Daten der Nachricht nicht mehr verfügbar. Vor dem Festschreiben sollten Sie daher Daten, die Sie aus der Nachricht benötigen, als tabellarische Daten oder in SQL-Variablen speichern.

Siehe auch
Beispiel

Im folgenden Beispiel wird der Inhalt aller Nachrichten, die an die Adresse myaddress gesendet wurden, im Meldungsfenster des Datenbankservers ausgegeben. Das Meldungsfenster wird alle 10 Sekunden aktualisiert, wenn keine Nachricht erhalten wurde:

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