Freigeben über


Zombies in BizTalk Server

Was ist ein Zombie?

  • Eine Zombienachricht ist eine Nachricht, die von der Messagebox an eine ausgeführte Orchestrierung weitergeleitet wurde und gerade in der Verarbeitung war, als die Orchestrierung beendet wurde. Eine Nachricht "in Verarbeitung" ist eine Nachricht, die an eine Dienstinstanz weitergeleitet wurde und sich somit in einer Messagebox-Warteschlange befindet, die für die Dienstinstanz bestimmt ist. Da die Nachricht nicht mehr von der abonnierenden Orchestrierungsinstanz verarbeitet werden kann, wird sie angehalten und mit einem ServiceInstance/Status-Wert von "Angehalten (nicht fortsetzbar)" gekennzeichnet.

  • Eine Zombiedienstinstanz ist eine Instanz einer Orchestrierung, die abgeschlossen wurde, während eine von der Messagebox an die Orchestrierungsinstanz weitergeleitete Nachricht noch in der Verarbeitung war. Da die Orchestrierungsinstanz beendet wurde, kann sie die Nachrichten "in Verarbeitung" nicht verarbeiten. Die Instanz wird somit angehalten und mit dem ServiceInstance/Status-Wert "Angehalten (nicht fortsetzbar)" gekennzeichnet.

Typische Ursachen

Das Auftreten von Zombies lässt sich üblicherweise einer der folgenden Kategorien zuordnen:

  1. Beenden von Steuermeldungen: Die Orchestrierungs-Engine ermöglicht die Verwendung von Steuermeldungen, um alle derzeit ausgeführten Arbeiten in einer bestimmten Orchestrierung instance abzubrechen. Da die ausgeführte Orchestrierung von der Kontrollnachricht unmittelbar angehalten wird, sind Zombieinstanzen nicht ungewöhnlich. Eine Reihe von Konzepten, die sich auf interaktiven Workflow beziehen, sowie weitere Konzepte sind auf die Verwendung dieses Mechanismus ausgerichtet.

  2. Paralleles Lauschen empfängt – In diesem Szenario wartet der Dienst instance auf 1 von n Nachrichten, und wenn er bestimmte Nachrichten empfängt, erledigt er einige Arbeit und beendet. Werden zum Zeitpunkt des Beendens der Dienstinstanz Nachrichten auf einem parallelen Zweig empfangen, werden Zombies erzeugt.

  3. Sequenzielle Konvois mit nicht deterministischen Endpunkten: In diesem Szenario ist ein master Orchestrierungszeitplan so konzipiert, dass alle Nachrichten eines bestimmten Typs verarbeitet werden, um bestimmte Systementwurfsanforderungen zu erfüllen. Diese Entwurfsanforderungen können geordnete Übermittlung, Ressourcenverteiler und Batchverarbeitung umfassen. Bei diesem Szenario geht die Tendenz dahin, eine While-Schleife zu definieren, die eine Wartefunktion mit zwei Zweigen einschließt, von denen einer über eine Form Empfangen und der andere über eine Form Verzögerung verfügt, gefolgt von einem beliebigen Konstrukt, mit dem eine Variable festgelegt wird, um anzugeben, dass die While-Schleife beendet werden soll. Dieser Vorgang ist nicht deterministisch, da eine Nachricht nach dem Auslösen der Verzögerung immer noch übermittelt werden könnte. Nicht deterministische Endpunkte wie dieser neigen dazu, Zombies zu erzeugen.

    Wenn ein Zombiedienst instance angehalten wird, wird die folgende Fehlermeldung generiert:

0xC0C01B4C The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended.

Sie können den BizTalk-Terminator verwenden, um Zombies zu entfernen.

Weitere Informationen

Entfernen von angehaltenen Dienstinstanzen in der Referenz zu benutzeroberflächen- und Entwickler-API-Namespace