2016-04-19 6 views
2

So habe ich diese Anforderung, die in einem Dokument dauert, und von dem ein oder mehrere Dokumente in der Ausgabe erstellt werden müssen.IBM Integration Bus, Best Practices für den Aufruf mehrerer Dienste

Während dieses Vorgangs muss festgestellt werden, ob das Dokument bereits vorhanden ist, da verschiedene Vorgänge für das Erstellen und Aktualisieren von Szenarios gelten.

In geraden Code, würde dies einfach sein (konzeptuell)

InputData in = <something> 

if (getItemFromExternalSystem(in.key1) == null) { 
    createItemSpecificToKey1InExternalSystem(in.key1); 
} 
if (getItemFromExternalSystem(in.key2) == null) { 
    createItemSpecificToKey2InExternalSystem(in.key1, in.key2); 
} 
createItemFromInput(in.key1,in.key2, in.moreData); 

In der Tat eine Art "gewährleisten diese Daten vorhanden sind".

Jedoch, in IIB Wie würde ich das erreichen? Wenn ich einen Unterablauf für den Get/create-Zyklus verwende, wäre die Ausgabe des Unterflusses unabhängig vom Ergebnis der letzten Operation, wird vom Unterfluss als die neue "Nachricht" des Flusses zurückgegeben, aber wirklich, tue ich nicht Achten Sie auf den Wert aus dem Subflow "Sicherstellen, dass Daten vorhanden sind". Ich muss stattdessen weiter an meiner ursprünglichen Nachricht arbeiten, aber immer noch warten, bis die verschiedenen Subflows fertig sind, bevor ich mein endgültiges "createItem" ausführen kann

Antwort

0

Haben Sie überlegt, den Collector-Knoten zu verwenden? Es wird Ihre Datensätze in N 'Sammlungen sammeln, und dann können Sie über die Sammlungen iterieren und ein Dokument pro Sammlung ausgeben.

4

können Sie Aggregationsknoten verwenden: zum Beispiel, verwenden 3 fließt:

  1. zuerst Ihre ursprüngliche Nachricht an dritte
  2. Sekunde Operationen createItemSpecificToKey1InExternalSystem und createItemSpecificToKey2InExternalSystem
  3. dritte wäre Aggregat berufen würde propagieren würde Ergebnisse der ersten und zweiten und rufen createItemFromInput auf.