Ich muss einen Spring Integration Flow implementieren, wo bestimmte Nachrichten nur verarbeitet werden können, wenn eine bestimmte Bedingung wahr wird, d. H. Diese Nachrichten müssen warten. Ich möchte den Fluss jedoch nicht blockieren. Gibt es eine Komponente, die das tut?Spring-Integration - Warten auf den Zustand vor der Verarbeitung der Nachricht
Antwort
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.
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.
- 1. wkhtmltopdf Warten auf Zustand vor dem Drucken
- 2. NServiceBus Verarbeitung Nachricht später
- 3. Mysql Vorschau Ausgabe vor der Verarbeitung?
- 4. Yii2: Wie Zustand vor der Modellerstellung
- 5. Warten auf Variable in Swift vor dem Ausführen der Funktion?
- 6. C# - Blockieren eines Ordners vor der Änderung während der Verarbeitung
- 7. DataTables Verarbeitung Nachricht auf Grid Reload
- 8. Lokalisierung FineUploader "Verarbeitung" Nachricht
- 9. Wie liest man den Inhalt eines JSON-Posts mit asp vor der Verarbeitung der Anfrage?
- 10. während der Verarbeitung laden Bild
- 11. Synchron auf Nachricht in Web-Worker warten
- 12. Überprüfen Zustand vor Methodenaufruf
- 13. ExtJS 4 Drag & Drop Warten auf asynchrone Aktion vor der Entscheidung, den Abfall (oder nicht)
- 14. erfassen Geschichte Zustand auf der Seite aktualisieren
- 15. Azure sdk ServiceBusTrigger löst Verarbeitung der gleichen Nachricht jede Minute
- 16. Hat CASE-Ausdruck alle Fälle vor der Verarbeitung ausgewertet?
- 17. Outbound-Kanaladapter in SpringIntegration FTP
- 18. Zählen Reihen vor der Verarbeitung mit einem Cursor Tsql
- 19. PHP - erzwingen Benutzer warten vor der Verwendung von Server-Ressourcen
- 20. Wie erkennt man den Zustand der Stromversorgung?
- 21. Pop den letzten Zustand aus der Geschichte
- 22. Wie können der Client und der Server warten, bis der andere die nächste Nachricht sendet?
- 23. Python-Skript warten vor der Ausführung ein anderes Skript
- 24. Inno Setup - Warten auf den Start der Postgres-Datenbank
- 25. C# asynchrone Dateiübertragung - Warten vor dem Fortsetzen der Schleife
- 26. Warten auf das Laden der Seite?
- 27. Der beste Weg, um Timings auf Rabbitmq Nachricht Verarbeitung zu behandeln
- 28. Toggle Active State in Vue vor der Verarbeitung den Rest des DOM
- 29. Was ist der richtige Weg, auf Verbindungen zu warten?
- 30. Warum lassen uns manche Websites vor der Weiterleitung warten?
Ein Nachrichtenspeicher-unterstützter (oder queue-backed) Kanal kann auch für die Persistenz verwendet werden und ist weniger kompliziert als ein Aggregator. –
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