Ich benutze Spring Boot, und ich habe einen POST-Endpunkt, der verschiedene Dinge tun muss, wie ein Objekt in der Datenbank persistieren und dann 3-4 andere Dienste aufrufen. Ich möchte jedoch eine Antwort kurz nach dem Datenbankaufruf zurückgeben und dann die anderen Dienste asynchron auf einem anderen Thread aufrufen? Der Anruf zu den anderen 3-4 Diensten ist in Ordnung, um schließlich konsistent zu sein (z. B. Anruf bei dem keen.io-Analysedienst). Wie ist das im Spring Boot leicht machbar?Einige Anrufe asynchron durchführen und sofort vom Spring Controller zurückkehren
Antwort
Eine Lösung besteht darin, dass ein Thread ausgeführt wird, der eine Warteschlange überwacht, um zu bestimmen, wann einige Arbeiten ausgeführt werden sollen. Wenn eine Anforderung ihre unmittelbare Aufgabe abgeschlossen hat, fügt sie der Warteschlange Informationen hinzu, damit der Überwachungsthread erkennen kann, dass er etwas Arbeit verrichten muss. Sie könnten einen Thread-Pool haben, der die Warteschlange überwacht, um die Leistung zu verbessern. Dies ist ein ziemlich standardisiertes Muster für die ereignisbasierte Programmierung, das die Möglichkeit bietet, Aktionen asynchron ausführen zu lassen.
Ich denke, dass Sie nicht einmal Frühling für diesen Job brauchen. Sie könnten java.util.concurrent.CompletableFuture#runAsync verwenden, um in einem anderen Thread sth async auszuführen.
Sie könnten auch die Feder async support verwenden. Kommentieren Sie einfach eine Spring-Bean-Methode (in Ihrem Fall die Rückgabe von Void) mit @Async
. Vergessen Sie nicht, die asynchrone Unterstützung zu aktivieren, indem Sie eine Konfigurationsklasse mit @EnableAsync annotieren.
Vereinbaren Sie mit Mathias, Spring Async sieht die beste Lösung. –
- 1. BluetoothAdapter.ACTION_REQUEST_ENABLE Anrufe onActivityResult sofort
- 2. Die Asynchron Aufgabe zurückkehren VERSION JSON
- 3. Wie kann ich mehrere beobachtbare Aufrufe asynchron aufrufen, aber gleichzeitig vor und nach diesen Aufrufen einige Berechnungen durchführen?
- 4. Wie kann ich einen Übergang vom Einzelansicht-Controller zum Split-View-Controller durchführen? Swift
- 5. Paket vom Server asynchron empfangen?
- 6. Spring-mvc-Controller und Ausnahmebehandlung
- 7. Spring Rest Controller und Paging
- 8. Mocking einige Anrufe und nicht spotten einige Anruf in der gleichen Frühling Service-Methode
- 9. wird C++ - Thread Join sofort zurückkehren oder nicht?
- 10. Interceptor in Angular, nur für einige Anrufe?
- 11. -Controller Zurückkehren HttpResponseMessage nicht Inhaltstyp Einstellung richtig
- 12. Spring MVC Pass mehrere Liste vom Controller zu Jsp
- 13. Können wir Asynchron-Operationen innerhalb eines Tests mit Jasmine durchführen?
- 14. Ist das Ausführen lang andauernder Anrufe asynchron so einfach?
- 15. didInsertElement vom Controller?
- 16. Spring Boot und Controller in importierten Modulen
- 17. Wie übergeben POST-Parameter vom Controller zu einem anderen Controller Spring MVC?
- 18. Controller-Variable asynchron Wert zuweisen - AngularJS
- 19. Codeigniter Daten sofort auf dem Controller abrufen
- 20. Autowire HttpServletRequest in Spring Controller
- 21. Emacs, eine Suche durchführen, Text kopieren und dann zum Ausgangspunkt der Suche zurückkehren?
- 22. Spring Controller Return-Ansicht und JSON Together
- 23. Angular - Umschaltstatus vom Controller
- 24. Rails-Validierung vom Controller
- 25. Winkelrufanweisung vom Controller
- 26. Spring Controller Validieren Anfrage
- 27. Spring Controller zerstören Methode?
- 28. Spring Nicht-Singleton-Controller
- 29. URL vom Controller ändern?
- 30. Referenz-Master-Controller vom Detail-Controller
so kick die Aufgaben in einem anderen Thread. –
Und es wäre in Ordnung, wenn der Controller zurückkehrt? – demig0d
Sie werden nicht wissen, ob die nicht abgeschlossenen Aufgaben erfolgreich abgeschlossen werden oder nicht. –