0

Sagen wir, ich habe einen Stream mit 3 Anwendungen - Quelle, Prozessor und Senke.Spring Cloud Dataflow - Beibehalten der Reihenfolge der Nachrichten

Ich muss die Reihenfolge meiner Nachrichten behalten, die ich von meiner Quelle erhielt. Wenn ich Nachrichten A, B, C, D erhalte, muss ich sie senden, um als A, B, C, D zu sinken. (Ich kann sie nicht als B, A, C, D senden).

Wenn ich nur 1 Instanz jeder Anwendung habe, wird alles nacheinander ausgeführt und die Reihenfolge wird beibehalten.

Wenn ich 10 Instanzen von jeder Anwendung habe, könnten die Nachrichten A, B, C, D in verschiedenen Instanzen zur gleichen Zeit verarbeitet werden. Ich weiß nicht, in welcher Reihenfolge diese Nachrichten landen.

Also gibt es eine Möglichkeit, die ich sicherstellen kann, dass ich die Reihenfolge meiner Nachrichten bei der Verwendung mehrerer Instanzen behalte?

Antwort

2

Nein; Beim Skalieren (entweder durch Parallelität im Ordner oder durch Bereitstellen mehrerer Instanzen) verlieren Sie die Reihenfolge. Dies gilt für jede Multithread-Anwendung, nicht nur für den Spring-Cloud-Stream.

Sie können die Partitionierung so verwenden, dass jede Instanz eine Partition der Daten erhält, die Reihenfolge jedoch nur in jeder Partition beibehalten wird.

Wenn Sie Sequenzinformationen in Ihren Nachrichten haben, können Sie ein benutzerdefiniertes Modul mit einer Spring Integration Resequencer hinzufügen, um Ihre Nachrichten in derselben Sequenz wieder zusammenzusetzen - aber Sie benötigen eine einzelne Instanz des Sequenzers vor einer einzelnen Sink-Instanz.

Verwandte Themen