2016-05-24 3 views

Antwort

0

Nicht ohne das Risiko, die Daten zu verlieren, wenn die Instanz ausfällt, da die Daten im Speicher gehalten werden (Sie könnten versuchen Sie es vorübergehend zu speichern und injizieren Sie es im Falle eines VM-Absturzes).

Es gibt ein Integrationsmuster, das Aggregator Geräte genannt Feder, die für genau diesen Zweck verwendet werden können (Link auf pattern und spring docs)

Sie erhalten eine CorrelationStrategy implementieren müssen, die Feder sagt, wie verschiedene Nachrichten verwandt sind miteinander und eine ReleaseStrategy, die Frühling sagen kann, wenn alle erforderlichen Elemente angekommen sind, und als solche können sie fortfahren.

Ich wiederhole das noch einmal, alle In-Flight-Daten werden im Speicher gehalten, so dass Sie herausfinden müssen, wie Sie Daten nach einem Shutdown/Absturz speichern und erneut einspeisen.

+0

Ein Nachrichtenspeicher-unterstützter (oder queue-backed) Kanal kann auch für die Persistenz verwendet werden und ist weniger kompliziert als ein Aggregator. –

+0

Wie würde das funktionieren, wenn Sie auf Nachrichten aus 1+ Warteschlangen warten und Echtzeitverarbeitung benötigen? (natürlich meine ich fast-real-time: D, sonst enden wir in einer anderen Art von Problemen). – Augusto

0

Sie können einen abfragenden Verbraucher unter einer QueueChannel starten/stoppen - während der Poller gestoppt wird, werden Nachrichten im Kanal gesammelt und dann konsumiert, wenn der Verbraucher gestartet wird.

Sie können entweder einen Verweis auf den Verbraucher über Bean Name erhalten und starten/stoppen oder Sie können einen Steuer-Bus verwenden und Nachrichten an ihn senden "foo.start()".

Die Nachrichten werden standardmäßig im Speicher gehalten. Wenn Sie Persistenz benötigen, können Sie einen Nachrichtenspeicher hinzufügen oder einen von JMS, RabbitMQ usw. unterstützten Kanal verwenden.

Verwandte Themen