2016-07-05 14 views
0

ich auf einer Orchestrierung Schicht bin zu arbeiten, wo Feder Integration mit, ich bin die Anforderung verarbeiten will, wie folgt:Frühling Integration: Mit Antwort von einem Ruf als einer der Eingänge zu später ruft

<int:recipient-list-router id="cfRequestRouter" input-channel="cfRequestChannel"> 
    <int:recipient channel="Op1RequestChannel"/> <!-- Calls Op1 Gateway --> 
    <int:recipient channel="Op2RequestChannel"/> <!-- Calls Op2 Gateway --> 
    <int:recipient channel="Op3RequestChannel"/> <!-- Calls Op3 Gateway -->    
    <int:recipient channel="AsyncOp4RequestChannel"/> <!-- Calls Op4 Gateway --> 
</int:recipient-list-router> 

Die Anfrage wird zuerst an den Op1RequestChannel gesendet, der wiederum an eine Op1 gesendet wird, um die Anfrage zu bearbeiten. Nach erfolgreicher Verarbeitung durch das Op1-Gateway wird die ursprüngliche Anforderung an das Op2-Gateway gesendet. Ich muss einige der Informationen aus der Antwort von Op2 Gateway verwenden und sie mit der ursprünglichen Anfrage über cfRequestChannel kombinieren und sie an AsyncOp4RequestChannel zur weiteren Verarbeitung senden, nachdem die Anfrage vom Op3 Gateway bearbeitet wurde.

Ich habe versucht, das Anspruch Check-Muster die Antwort von Op2RequestChannel zu speichern und als Antwort-Header auf Op2-Gateway zurückgegeben, aber nicht sicher, wie die Überschrift aus dieser Antwort zu übernehmen und an AsyncOp4RequestChannel übergeben. Wie kann ich einen Anspruch auschecken und in einem Transformer Daten abrufen, die als Payload hinzugefügt werden, bevor Sie sie an Op4 Gateway senden?

Irgendwelche Vorschläge, wie man das macht?

Update:

Nachricht kommt in auf cfRequestChannel (die Anfrage ist eine Kombination aller für jeden der vier Ströme Pflichtfelder)

-> nennen Op1 Flow (REST-API-Aufruf) Berechtigung zu validieren

-> Beim Empfang von Http 200, senden an Op2-Fluss -> Op2-Fluss (REST API-Aufruf) erstellt eine eindeutige ID bei erfolgreicher Verarbeitung. Wenn irgendetwas anderes als Http 200, senden Sie es als Fehler zum Client

-> Wenn Op2 Flow erfolgreich ist, rufen Sie Op3-Fluss (REST API-Aufruf), die ein anderes System aktualisiert. Die Antwort enthält ein Statusfeld mit zwei Werten: Genehmigt, Ausstehend. Wenn Genehmigt, sammeln Sie die eindeutige ID aus dem Op2-Flow und einige Felder aus der ursprünglichen Nachricht und senden Sie sie zur Protokollierung an den Op4-Flow. Wenn Ausstehend, verwenden Sie eine generische Nachricht, um den Op4-Fluss aufzurufen. Wenn während des Op3-Flusses ein Fehler auftritt, senden Sie diese an den Client zurück.

-> Wenn Op3 Fluss erfolgreich ist, einen asyc Aufruf Op4 machen und kehrt sofort mit Erfolg Code Client

Antwort

0

ein enricher Verwenden Sie den Op2- Fluss zu nennen; der Anreicherer kann verwendet werden, um Inhalte zu den Nutzdaten und/oder Kopfzeilen hinzuzufügen.

See the documentation.

+0

Ich muss einen weiteren Anruf zu Op3 fließen, bevor ich Op4 Anruf tätigen kann, die Feuer und vergessen werden wird Anruf. Op2 und Op3 sind die Hauptdienste, die das Ergebnis dieser Orchestrierung bestimmen. Auf der Grundlage der Antwort von Op3 muss ich möglicherweise Daten aus der Antwort von Op2 extrahieren und sie als einen Async-Aufruf unter Verwendung eines Executor-Kanals an Op4 senden. Ist der Einsatz eines Anreichers zum Aufruf von Op2 die beste Lösung in diesem Fall? – Nisha

+0

Die Downstream-Topologie ist irrelevant - wenn Sie Daten mit dem Ergebnis des Aufrufs eines Dienstes erweitern möchten, ist der Anreicherer die richtige Komponente. –

+0

Kannst du mir bitte helfen zu verstehen, wie man den Anruf in Op3 fließen lassen kann, wenn ich einen Anreicherer verwende, um den Op2-Fluss aufzurufen?Ich muss die Antwort vom Op3-Fluss analysieren, und abhängig von einem Wert für eines der Felder muss ich entweder die ursprüngliche Anfrage mit Op2-Antwort oder einem anderen Wert anreichern. – Nisha

1

Wenn Ihr AsyncOp4 nicht nur die ursprüngliche Nachricht verwendet, sondern auch die Antwort von Op2, müssen Sie entweder eine Inhaltsanreicherung verwenden, um diese Nachricht in eine andere anzureichern oder vollständig umzuwandeln, und die umgewandelte Nachricht an AsyncOp4 senden

+0

Ja, ich muss die ursprüngliche Nachricht mit der Antwort aus dem Op2-Fluss anreichern, bevor ich zum Op4-Fluss sende, aber ich muss auch einen weiteren Aufruf zum Op3-Fluss machen und erst nach dem Analysieren der Daten von Op3 werde ich wissen, ob ich nicht muss die Op2-Antwort verwenden. Bei Fehlern aus Op2- oder Op3-Flows kann der Op4-Fluss nicht einmal aufgerufen werden. In diesem Fall muss der Fehler zurück an den Client gesendet werden. – Nisha

+0

In diesem Fall müssen Sie die Op3 konfigurieren und einen Filter hinzufügen (um nur bestimmte Nachrichtenarten auszuwählen, die auf der Antwort von Op3 basieren). Oder kann etwas im Header der Nachricht gesetzt werden und einen Header-Wert-Router verwenden. Überdenken Sie auch Ihre gesamte Orchestrierung und sehen Sie, ob Sie diese optimieren oder verbessern können. Es scheint zu eng gekoppelt zu sein. – code4kix

+0

Ok danke für den Vorschlag, ich werde die Orchestrierung neu bewerten. – Nisha