2016-07-01 10 views
1

Derzeit ich auf einer Frühlings-Integration Anwendung arbeite, die eine folgende Szenario hat:Lese und Herunterladen von einem paginierte REST-Diensten mit Feder Integration

  1. Ein int-http:outbound-gateway Lese aus einem REST-Diensten eine Liste der durchnummerierten Seiten Elemente: etwa in
  2. Jeder Seiteninhalt aufgeteilt und in einem Ordner gespeichert, um später von einem Feder-Batch-Job verarbeitet werden.

Ich bin ganz neu mit Feder Integration, und ich weiß nicht, ob es possibile ist mit `int-http eine Art Schleife zu erstellen: Outbound-Gateway‘ alle Seiten bis zum letzten zu lesen.

Wir sprechen über 66254 Elemente in 2651 Seiten aufgeteilt. Was ich suche, ist eine bewährte Methode zum Lesen und Herunterladen aller Seiten und zum Sammeln von Daten ohne Speicherprobleme.

Jeder möglicher Vorschlag

Dank

Antwort

1

Ja klar, es ist möglich, wenn auch ein bisschen schwierig.

Nehmen Sie an, Ihr REST-Dienst benötigt als Request-Parameter page. Sie möchten also eine Anfrage von der Seite 1 und loop (Inkrement page param) erstellen, bis der Service ein leeres Ergebnis zurückgibt.

So können Sie Konfiguration für den REST-Service haben wie:

<int-http:outbound-gateway url="http://service/elements?page={page}"> 
    <int-http:uri-variable name="page" expression="headers['page']"/> 
</int-http:outbound-gateway> 

Achten Sie auf diese <int-http:uri-variable> Definition. Von Anfang an müssen Sie die Nachricht an diese <int-http:outbound-gateway> mit dem page Header als 1 senden.

Die Antwort von diesem Gateway sollten Sie an etwas wie <recipient-list-router> senden, oder <publish-subscribe-channel>, wo einer der Abonnenten ist immer noch Ihre splitter um Elemente in den Ordner zu speichern.

Ein anderer Teilnehmer ist ein bisschen klug. Es beginnt von <filter>, um zu überprüfen, ob die payload (ein Ergebnis aus dem REST-Aufruf) leer ist, was bedeutet, dass wir getan haben und nicht mehr Seiten auf dem Dienst abzurufen. Andernfalls verwenden Sie <header-enricher>, um den Header page zu erhöhen und zu ersetzen, und senden Sie das Ergebnis an unseren ersten <int-http:outbound-gateway>.