Suche

über alle News und Events

 

Alle News

 

Stellenanzeige: Wir suchen dringend an unserem...

Weiterlesen

How-to: SendPortGroups und Delivery Notification

Nach der Implementierung und dem Benutzen einer Orchestration mit SendPortGroups wurde ich auf folgenden Fehler aufmerksam gemacht. „The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended." So lässt er sich lösen...

 

In der BizTalk Administration Console existierten in unserem Fall mehr als 1800 Suspended Service Instanzen. Dies zu bereinigen war der einfache Teil des Fehlers. Nachdem ich mir die Orchestration angesehen hatte, war klar, warum wir hier Suspended Instanzen in der BizTalk Admin Console bekamen.

Durch das Setzen der „Delivery Notification“ auf „Transmitted“ schickt BizTalk die Nachricht an die SendPortGroup und erwartet genau eine (N)ACK-Nachricht von dem Port, in unserem Fall die SendPortGroup, zurück. Sobald der erste Send Port der Gruppe fertig ist, schickt er ebenfalls seine Antwort an BizTalk zurück, wohingegen die Orchestration ihre Subskription bereits entfernte und keine weiteren Nachrichten mehr konsumierte.

Nun gab es verschiedene Möglichkeiten der Problembehebung, zum einen kann die SendPortGroup einfach durch einzelne Send Ports ersetzt werden. Diese Möglichkeit konnten wir aufgrund der Anforderungen aber so nicht umsetzen. Die bessere Variante, um auch weiterhin SendPortGroups einsetzen zu können, war die, für jeden Send Port der SendPortGroup auf eine (N)ACK Nachricht zu warten. Dazu mussten wir nur herausfinden, wie viele Send Ports in der Gruppe eingetragen sind.

Folgender Code wurde dafür implementiert:

Dieser Code ermittelt die Anzahl Send Ports einer beliebigen SendPortGroup, damit wir in der BizTalk Orchestration entsprechend der Anzahl in einer Schleife auf alle (N)ACK‘s der Send Ports reagieren können.

Die „Delivery Notification“ des Send Ports wurde als Erstes deaktivieren, damit wir diese Funktionalität selbst nachbauen können.

       

Die Orchestration ist folgendermaßen aufgebaut.

Anm.: Hier wird ein Send Port und eine ReceiveLocation (per „Direct Binding“) benötigt.

Message Creation Shape

Zuerst wurde die Nachricht, die versendet werden muss, erstellt. Folgende Parameter mussten dieser Nachricht hinzugefügt werden, damit wir die „Delivery Notification“ für alle Send Ports erhalten:

Send Shape

Um die Nachrichten richtig Routen zu können, müssen unbedingt zwei „Correlation Types“ erstellt werden:

Hier muss, wie der Name vermuten lässt, dass propertie „BTS.AckRequired“ gesetzt werden.

Hier muss separat das „BTS.CorrelationToken“ als „Correlation Propertie“ ausgewählt werden.

Beide müssen dann im Send Port als „Initializing Correlation“ Set eingestellt werden.

Receive Shape

Das ReceiveShape nach dem Send Port dient dem Empfangen des ersten (N)ACK’s, der SendPortGroup selbst. Hier ist auf das „Following Correlation Set“ zu achten:

Loop

Hier muss als erstes ermittelt werden, wie viele Send Ports in der Gruppe enthalten sind, das wird mit der von uns implementierten Methode gemacht, die uns dann die Anzahl der Send Ports zurückgibt.

In der nachfolgenden Schleife warten wir dann für alle Send Ports in der Group auf eine Antwort und prüfen für die jeweilige Nachricht, ob diese erfolgreich war.

Nun kann man eine Fehlerbehandlung einbauen, die im Falle eines NACK’s oder des ACK’s weitere Schritte ausführt.

                                                                                                                                   

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz