Wie sammelt ChunkMessageChannelItemWriter Antworten beim Spring Batch Remote Chunking?
-
21-12-2019 - |
Frage
Ich versuche, Remote-Chunking im Spring-Batch mithilfe von Spring-Integration und amqp (rabbitmq) zu implementieren.
Ich kann nicht verstehen, wie ChunkMessageChannelItemWriter Antworten im Remote-Chunking-Test unten sammelt
Wie funktioniert es ?Sendet es eine Nachricht, wartet auf die Antwort, empfängt die Antwort und dann noch einmal eine zweite Nachricht, wartet auf die Antwort auf die zweite Nachricht und empfängt die Antwort auf die zweite Nachricht und so weiter?
Oder sendet es alle Nachrichten asynchron, wartet auf Antworten und empfängt dann Antworten, sobald sie auf dem Antwortkanal eintreffen?
Wenn wir uns hier auf die Remote-Chunking-Dokumentation beziehen
Es werden eingehende und ausgehende Adapter verwendet.Wenn ChunkMessageChannelItemWriter Antworten erhält, warum brauchen wir dann Adapter?Und warum werden auf der Slave-Seite sowohl Adapter als auch Service-Aktivator verwendet?
Kann mir bitte jemand helfen, die Funktionsweise zu verstehen, da es anhand der Dokumentation schwer zu verstehen ist?
Lösung
Das ist nur ein Testfall – alles läuft lokal – schauen Sie sich das an JMS-Testfall für ein realeres Beispiel.Der Channel-Item-Writer sendet alle Chunks mithilfe eines Outbound-Channel-Adapters an JMS.
Die Remote-Seite (JMS-Listener-Container) empfängt die Chunks, verarbeitet sie und sendet die Antworten an die replies
Warteschlange.
Jedes Mal, wenn der Writer zum Schreiben eines Chunks aufgerufen wird, prüft er, ob Antworten vorhanden sind, und unterbricht ggf. den Vorgang, wenn die Drosselungsgrenze überschritten wird.
Wenn alle Chunks geschrieben sind, in afterStep()
, wartet es auf den Rest der Ergebnisse.
Beim lokalen Testfall funktioniert das alles genauso, da der Chunk-Handler die Antworten in einen Warteschlangenkanal schreibt.