WS-Reliable Messaging
# WS-Reliable Messaging

WS-Reliable Messaging (Verlässliche Nachrichtenübermittlung) ist eine Spezifikation aus dem Bereich WS-*, die garantiert, dass gesendete Nachrichten auch im Fall von Versagen einzelner Softwarekomponenten beim Empfänger ankommen.

Dazu sind quasi auf Sender- und Empfängerseite je ein Vermittler auf Middleware-Ebene dazwischengeschaltet.

## Unterspezifikationen

WSRM beinhaltet die Unterspezifikation WS-Reliable Messaging Policy Assertion, die mögliche Richtlinien aus dem Bereich Reliable Messaging spezifiziert. Diese Assertions können dann über WS-Policy eingebunden werden.

## Ablauf einer Kommunikation

* Der Sender übergibt seine Nachricht an seinen Vermittler.
* Dieser Vermittler stellt eine Verbindung zum Vermittler auf Empfängerseite her.
* Die Nachricht wird von Vermittler zu Vermittler übertragen.
* Der Nachrichteneingang wird vom Empfängervermittler bestätigt.
* Der Vermittler auf Empfängerseite liefert die Nachricht an den eigentlichen Empfänger aus.

Durch diesen Ablauf ist sichergestellt, dass a) der Empfänger die Nachricht wirklich bekommen hat und b) der Sender auch darüber Bescheid weiß.

## Funktionsweise und Beispiel

Dies kann auch über eine längere Kette von Nachrichten funktionieren, indem der Vermittler beim Sender in den SOAP-Header zusätzlich noch einen Identifier sowie eine Nachrichtennummer einfügt. Ist eine Nachricht die letzte aus einer ganzen Reihe von Nachrichten, so wird zusätzlich noch ein Element <wsrm:LastMessage/> eingefügt, das dem Vermittler auf Empfängerseite zeigt, dass keine weitere Nachricht mehr kommen wird. In den jeweiligen Eingangsbestätigungen gibt der Vermittler auf Empfängerseite dann zusätzlich an, auf welchen Identifier er sich bezieht sowie die Nummern der Nachrichten, die er bereits erhalten hat, bzw. die noch fehlen. Beispielsweise würde folgender Antwortausschnitt besagen, dass die Nachrichten 1, 2 und 4 bis 7 erhalten wurden und 3 noch fehlt:

Es gibt vier mögliche Liefergarantien („delivery assurances“):

* AtLeastOnce: Jede Nachricht wird mindestens einmal zugestellt, dabei ist es auch möglich, dass sie bedeutend öfter ankommt. Sollte eine Zustellung nicht möglich sein, muss ein Fehler gemeldet werden.
* AtMostOnce: Jede Nachricht wird maximal einmal zugestellt. Es ist möglich, dass eine Nachricht gar nicht ankommt, aber der Empfänger wird nie eine Nachricht mehrfach erhalten.
* ExactlyOnce: Jede Nachricht wird genau einmal zugestellt. Duplikate sind ausgeschlossen und Nachrichten können nicht verloren gehen. Sollte eine Zustellung nicht möglich sein, wird eine Fehlermeldung ausgelöst.
* InOrder: Alle Nachrichten werden genau in der Reihenfolge ankommen, in der sie abgesendet wurden. Diese Garantie kann mit jeder der drei vorangehenden Liefergarantien kombiniert werden.
