Gibt einen Wert zurück, der angibt, ob diese Nachricht vorher bereits empfangen, aber nicht bestätigt wurde
Element | Beschreibung | Bemerkungen |
---|---|---|
1 | Nachricht-ID | VARCHAR(128). Sie können die Nachricht-ID aus ml_qa_createmessage oder ml_qa_getmessage abrufen. |
Der Neuzustellungswert als BIT. Der Wert 1 gibt an, dass es sich um eine Neuzustellung der Nachricht handelt, 0 gibt an, dass die Nachricht nicht neu zugestellt wurde.
Eine Nachricht kann neuzugestellt werden, wenn sie vorher empfangen, aber nicht bestätigt wurde. Beispiel: Die Nachricht wurde empfangen, aber die empfangende Anwendung konnte die Nachrichtenverarbeitung vor einem Systemabsturz nicht abschließen. In diesen Fällen markiert QAnywhere die Nachricht als neuzugestellt, um den Empfänger darauf aufmerksam zu machen, dass die Nachricht teilweise bereits verarbeitet sein könnte.
Beispiel: Angenommen, der Empfang einer Nachricht erfolgt in drei Schritten:
Eine Anwendung, die einen nichttransaktionalen QAnywhere-Manager benutzt, empfängt die Nachricht.
Die Anwendung schreibt den Inhalt der Nachricht und die Nachricht-ID in eine Datenbanktabelle T1 und schreibt die Änderung fest.
Die Anwendung bestätigt die Nachricht.
Wenn die Anwendung zwischen Schritt 1 und 2 oder zwischen Schritt 2 und 3 abstürzt, wird die Nachricht beim Neustart der Anwendung neuzugestellt.
Falls der Fehler zwischen den Schritten 1 und 2 auftritt, sollten Sie die neu zugestellte Nachricht mit den Schritten 2 und 3 verarbeiten. Falls der Fehler zwischen den Schritten 2 und 3 auftritt, wurde die Nachricht bereits verarbeitet und muss nur noch bestätigt werden.
Um den Status bis zum Absturz der Anwendung zu ermitteln, kann die Anwendung ml_qa_getredelivered aufrufen, um zu prüfen, ob die Nachricht bereit vorher neuzugestellt wurde. Nur neuzugestellte Nachrichten müssen in der Tabelle T1 geprüft werden. Da es wahrscheinlich nur selten zu einem Absturz der Anwendung kommt, ist diese Vorgehensweise effizienter als der Zugriff der Anwendung auf die Nachricht-ID der empfangenen Nachricht, um zu prüfen, ob die Nachricht in der Tabelle T1 eingetragen wurde.
Sie können diesen Header lesen, nachdem eine Nachricht empfangen wurde und bis ein Zurücksetzen oder ein Festschreiben erfolgt, danach nicht mehr.
Im folgenden Beispiel wird eine Nachricht empfangen. Wenn die Nachricht vorher bereits zugestellt, aber noch nicht empfangen wurde, wird die Nachrichten-ID im Meldungsfenster des Datenbankservers ausgegeben:
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 |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |