Messagingzustellungsgarantien und sichere Zustellung

 

Nachrichtenzustellungsgarantien und Statuskonsitenz

Für Workflows, die statusbehaftete Prozesse darstellen, werden häufig verteilte Transaktionen verwendet, um die Verarbeitung einer Nachricht mit dem aktualisierten Status der Workflowinstanz so auszuführen, dass die Nachricht garantiert genau ein Mal verarbeitet wird.Workflow-Manager 1.0 verwendet kein MSDTC, um die Statuskonsistenz zwischen der Workflowinstanz und ihren Nachrichten zu gewährleisten.Stattdessen wurde ein Konsistenzmodell implementiert, das Service Bus verwendet, um genau eine Verarbeitung eingehender Nachrichten in einer hochgradig skalierbaren Umgebung zu gewährleisten.Dies führt jedoch zu einigen grundlegenden Unterschieden bei der Verarbeitung ein- und ausgehender Nachrichten mit einem Workflow.

Eingehende Nachrichten (die über den Benachrichtigungsendpunkt gesendet werden – siehe oben) werden garantiert an den Workflow übermittelt, solange der Statuscode 200 zurückgegeben wird.Wiederholungsversuche für Nachrichten können idempotent ausgeführt werden, solange die gleiche MessageId angegeben wird. Auf diese Weise wird sichergestellt, dass sich die Zuverlässigkeit des HTTP-Transports nicht auf die allgemeine Zustellungsgarantie auswirkt.Intern wird die Nachricht, sobald sie vom Benachrichtigungsendpunkt empfangen wurde, dauerhaft in Service Bus gespeichert, bis sie an den oder die Workflow(s) übermittelt wird.

Wenn ein Workflow eine Nachricht empfängt, wird diese geladen, und die Ausführung wird gestartet oder fortgesetzt.Während des Vorgangs einer Workflowausführung werden alle Nebenaufgaben (z. B. mithilfe von HTTP-Aktivitäten gesendete Nachrichten) gesammelt und zurückgestellt, bis der aktualisierte Staus des Workflows erfolgreich gespeichert wurde.Zu diesem Zeitpunkt wird die eingehende Nachricht (sie nun verarbeitet wurde) aus dem dauerhaften Speicher entfernt, und anschließend wird die Nebenaufgabe ausgeführt.Ausgehende Nachrichten werden gesendet. Wenn aufgrund von Netzwerkproblemen oder Prozessfehlern ein Fehler auftritt, erfolgt anschließend ein Wiederholungsversuch.Das Endergebnis besteht darin, dass für ausgehende Nachrichten garantiert wird, dass sie mindestens ein Mal gesendet werden. Aus diesem Grund müssen Webdienste ggf. für die idempotente Verarbeitung von Nachrichten konzipiert werden.Antworten werden an den Workflow zurückgegeben, um die Workflowausführung fortzusetzen.