Orchestrierungen
Orchestrierungen sind ausführbare Geschäftsprozesse, die Nachrichten über die MessageBox-Datenbank abonnieren (empfangen) und veröffentlichen (senden) können. Darüber hinaus können Orchestrierungen neue Nachrichten erstellen. Nachrichten werden über das Abonnement und die Routinginfrastruktur empfangen, die unter Lebenszyklus einer Nachricht beschrieben wird. Wenn Abonnements für Orchestrierungen ausgestellt werden, wird eine neue Instanz aktiviert und die Nachricht übermittelt. Im Falle von Instanzenabonnements wird die Instanz reaktiviert (falls erforderlich) und die Nachricht dann übermittelt. Wenn Nachrichten von einer Orchestrierung gesendet werden, werden sie in der MessageBox-Datenbank auf dieselbe Art und Weise wie beim Eingehen einer Nachricht am Empfangsspeicherort veröffentlicht. Die passenden Eigenschaften werden in die Datenbank eingefügt, um beim Routing verwendet zu werden.
Nachrichten, die in einer Orchestrierung erstellt werden, müssen in der MessageBox-Datenbank abgelegt und in der Orchestrierungsinstanz auf sie verwiesen werden. Sie sollten jedoch nicht veröffentlicht werden, da sie noch nicht gesendet wurden. Der XLANG/s-Subdienst ruft die Nachrichtenagenten-API auf, um Nachrichten direkt einzufügen. Auf diese Weise kann die Orchestrierungs-Engine den Nachrichtentextteil in die MessageBox einfügen und direkt mit der ausgeführten Orchestrierungsinstanz verknüpfen. Die persistente Speicherung der erstellten Nachricht in der MessageBox-Datenbank wird in der Orchestrierung mithilfe von Persistenzspeicherpunkten koordiniert, um die Datenbankvorgänge weiter zu optimieren.
Die Bindung ist ein Konzept in Orchestrierungen, das die Vorgänge zum Veröffentlichen und Abonnieren scheinbar unterscheidet. Orchestrierungsports sind logische Ports, die eine Interaktion beschreiben. Sie müssen diese logischen Ports an einen physischen Port binden, damit die Nachrichten übermittelt werden. Dieser Bindungsvorgang ist jedoch nicht mehr als das Konfigurieren von Abonnements für das Nachrichtenrouting.
Sie haben vier grundlegende Möglichkeiten zum Binden dieser Ports:
Jetzt angeben (Ports werden direkt in der Orchestrierung angegeben)
Später angeben (Ports werden zum Zeitpunkt der Bereitstellung angegeben)
Verwenden eines dynamischen Sendeports, wobei die Adresse im Orchestrierungscode festgelegt wird
Erstellen einer direkten Bindung von der Orchestrierung entweder zur MessageBox-Datenbank oder zu einer anderen Orchestrierung
Bereitstellen von Orchestrierungen
Wird eine Bindung zur Entwurfszeit angegeben, dann wird der physische Port, der mit den in der Orchestrierung konfigurierten Parametern übereinstimmt, beim Bereitstellen der Orchestrierung erstellt. Wird die Bindung zum Zeitpunkt der Bereitstellung konfiguriert, kann jeder Port, der die Anforderungen des logischen Ports erfüllt, an den Orchestrierungsport gebunden werden. Beim dynamischen Binden wird ein physischer Port wie mit der Option "Jetzt angeben" erstellt, nur dass der Port ein dynamischer Sendeport ist, für den keine Adressinformationen konfiguriert sind.
Verwirrend ist das Konzept, dass ein Sendeport in einer Orchestrierung zwar an einen physikalischen Sendeport gebunden ist, was jedoch nicht die Möglichkeit ausschließt, dass Nachrichten an andere Abonnenten übermittelt werden. Das heißt, wenn nun ein anderer Sendeport ein Abonnement besitzt, empfangen über dessen Filter beide Sendeports die an den gebundenen Port gesendete Nachricht. Die Bindung bildet einfach das Abonnement, sodass die von der Orchestrierung gesendete Nachricht immer die Kriterien für den gebundenen Sendeport erfüllt. Ebenso erstellt der an einen Empfangsport gebundene Orchestrierungsport das entsprechende Abonnement basierend auf dem Nachrichtentyp und der Empfangsport-ID. Mit den Abonnements wird sichergestellt, dass die Nachrichten, die in die Orchestrierung ein- und ausgehend werden, an die gebundenen Ports übermittelt werden, aber die Nachrichten durchlaufen weiterhin den zuvor beschriebenen Veröffentlichungs- und Abonnierungsmechanismus.
Die Option "Direkte Bindung" gehört wahrscheinlich zu den am meisten missverstandenen, falsch oder unzureichend verwendeten Optionen. Das direkte Binden ermöglicht es einer Orchestrierung, Nachrichten in der MessageBox-Datenbank mit verschiedenen Routingeigenschaften zu veröffentlichen, wie bei Nachrichten, die von Empfangsspeicherorten veröffentlicht werden. Beim einfachen direkten Messaging wird die Nachricht mit ihren höher gestuften Eigenschaften in der MessageBox veröffentlicht, um wie jede andere in BizTalk Server eingegangene veröffentlichte Nachricht weitergeleitet zu werden. So kann jeder Abonnent diese Nachricht empfangen. Es muss jedoch mindestens ein Abonnent vorhanden sein, andernfalls erhält die Orchestrierung einen Routingfehler.
Eine andere Möglichkeit der direkten Bindung ist die Verwendung selbstkorrelierender Ports. Selbstkorrelierende Ports sind Ports, die ein eindeutiges Korrelationstoken erstellen und dieses Token allein beim Korrelieren von Nachrichten zwischen Instanzen verwenden. Der häufigste Einsatz von selbstkorrelierenden Ports ist der Aufruf oder Start einer Orchestrierung, wobei ein Portparameter übergeben wird. In der aufgerufenen Orchestrierung kann der Port dann zum Senden einer Nachricht verwendet werden, während in der aufrufenden Orchestrierung derselbe Port zum Empfangen einer Nachricht verwendet werden kann. Da der Port ein eindeutiges Korrelationstoken besitzt, wird die Nachricht an die aufrufende Orchestrierung zurückgesendet. Selbstkorrelierende Ports agieren als private Kommunikationskanäle zwischen Orchestrierungsinstanzen.
Die letzte Option besteht im Verwenden einer Partnerorchestrierung, wobei der Port sowohl in der aufrufenden Orchestrierung als auch in der aufgerufenen Orchestrierung mit demselben gemeinsamen Porttyp konfiguriert wird und in der Portkonfiguration derselbe Ports ausgewählt wird. Beispiel: Sowohl in "Orch1" als auch in "Orch2" ist der Port "Orch2.MyDirectPort" ausgewählt. Durch diesen Bindungstyp wird ein Abonnement für die empfangende Orchestrierung eingerichtet, das auf dem Typ der sendenden Orchestrierung sowie dem Port- und dem Vorgangsnamen basiert. Damit wird sichergestellt, dass die Nachrichten an die richtige Instanz weitergeleitet werden.
Alle Möglichkeiten des direkten Messaging basieren auf dem zugrunde liegenden Veröffentlichungs- und Abonnement-Modell. Der Unterschied zwischen diesen Optionen besteht in den zum Erstellen von Abonnements und für das Routing verwendeten Eigenschaften und in den speziellen Einsatzgebieten.
Ein häufig auftretendes Problem beim Verwenden direkt gebundener Ports in Orchestrierungen besteht darin, dass eine Orchestrierung möglicherweise eine Nachricht veröffentlicht, die sie gleichzeitig abonniert hat. Beispiel: Eine Orchestrierung ist so konfiguriert, dass sie von einer Nachricht vom Typ "PurchaseOrder" aktiviert wird. Diese Orchestrierung verwendet einen direkten Port, um die PurchaseOrder-Nachricht in der MessageBox zu veröffentlichen. Die Nachricht wird also wie erwartet empfangen, es wird jedoch eine weitere Instanz einer Orchestrierung gestartet, da diese ebenfalls ein Abonnement für PurchaseOrder-Nachrichten besitzt. Dieser Ablauf kann sich endlos wiederholen und ein Entwickler kann einige Zeit benötigen, um herauszufinden, was passiert ist.
Correlation
Korrelation in Orchestrierungen ist der Mechanismus zum Empfangen verwandter Nachrichten im gleichen ausgeführten Orchestrierungs-instance. Im Orchestrierungs-Designer führt ein Entwickler die folgenden allgemeinen Schritte durch, um eine Korrelierung zu verwenden:
Er definiert einen Korrelationstyp, der die höher gestuften Eigenschaften enthält, die zum Verknüpfen von Nachrichten verwendet werden.
Er definiert einen Korrelationssatz, der eine Instanz des eben definierten Korrelationstyps darstellt.
Er legt für die Sende- und Empfangsports fest, ob sie einen Korrelationssatz initiieren oder einem bestimmten Korrelationssatz folgen.
Instanzenabonnements spielen dann eine Rolle, wenn ein Korrelationssatz initiiert wird, denn zu diesem Zeitpunkt werden Abonnements für alle Ports erstellt, die diesem Korrelationssatz folgen, um Nachrichten zu empfangen. Da der Korrelationstyp die für die Korrelation zu verwendenden Eigenschaften definiert, kann die Orchestrierungs-Engine diese Eigenschaften aus der Nachricht extrahieren, die von der initiierenden Aktion gesendet oder empfangen wird. Diese Werte werden dann zum Definieren von Abonnements für alle verbleibenden Aktionen verwendet, die diesem Korrelationssatz folgen.
In BizTalk Server eingehende Nachrichten, die für die Verwendung in einer Korrelation bestimmt sind, müssen daher unbedingt ordnungsgemäß definierte und in den Nachrichtenkontext höher gestufte Eigenschaften besitzen. Die meisten Eigenschaften werden höher gestuft, wenn eine Disassemblerkomponente in einer Pipeline die Werte beim Erstempfang der Nachricht extrahiert. Daher ist es nicht möglich, eine Empfangspipeline zum Durchlassen zum Empfangen von Nachrichten zu verwenden, die mit einer laufenden Instanz einer Orchestrierung korreliert werden müssen. Dieses Problem tritt auf, wenn Sie den SOAP-Empfangsadapter zum Empfangen von korrelierten Nachrichten einsetzen, da die Pipeline zum Durchlassen der Standardwert für die Empfangspipeline ist, wenn der Assistent für BizTalk-Webdienstpublishing verwendet wird.
Weitere Informationen
Artefakte
Erstellen von Orchestrierungen mithilfe des Orchestrierungs-Designers