Ich arbeite an einem Projekt mit Spring-Boot, Feder-Batch und Feder-Integration.Job-Launch-Gateway und persistente Warteschlange
Ich habe die Federintegration bereits konfiguriert, um einen Spring-Batch-Job zu starten, wenn eine neue Nachricht eintrifft.
Ich sende eine Nachricht an den Spring-Integration-Kanal, der an den JobLaunchingGateway angeschlossen ist, und für jede Nachricht versuche der JobLaunchingGateway, einen neuen TaskExecutor zu starten.
Lassen Sie den Kanal durch eine beständige Warteschlange (ActiveMQ als Beispiel) Lassen Sie die Task-Testamentsvollstrecker Pool-Größe gleich 2
ich das System konfigurieren mag gesichert werden, so dass, wenn der Vollstrecker pool- Größe wird bereits verwendet Die neuen Nachrichten werden nicht vom JobLaunchingGateway verbraucht, verbleiben jedoch in der persistenten Warteschlange.
Ist es möglich? Gibt es Best Practices?
Jede Rückmeldung wird geschätzt. Vielen Dank im Voraus.
Vielen Dank für Ihre schnelle Antwort. Der zweite Weg ist genau das, was ich implementieren möchte, weil ich im Falle eines Absturzes nichts verlieren will. Aber was meinst du mit "den Job auf dem Listener-Container ausführen"? Schlägst du vor, den Job innerhalb einer Implementierung von MessageDelegate auszuführen und dieses MessageDelegate über einen MessageListenerAdapter an den DefaultMessageListenerContainer zu übergeben? Und was denken Sie über eine "Batch-Int: Job-Start-Gateway", die einen JobLouncher mit einem SyncTaskExecutor verwenden? – gdegani
Verwenden Sie keinen Task-Executor, und der Job wird im Listener-Container-Thread des Kanals ausgeführt. Das Framework kümmert sich um alles für Sie. Der 'SubscribeJmsChannel' hat einen Container; Stellen Sie die Nebenläufigkeit so ein, wie Sie es wünschen, und verbinden Sie den Job direkt mit dem Gateway. Wenn Sie immer noch Probleme mit dem Verständnis haben, bearbeiten Sie Ihre Frage mit Ihrer aktuellen Konfiguration, damit Sie jemand weiterleiten kann. –