2016-08-08 7 views
0

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

+0

so kick die Aufgaben in einem anderen Thread. –

+0

Und es wäre in Ordnung, wenn der Controller zurückkehrt? – demig0d

+0

Sie werden nicht wissen, ob die nicht abgeschlossenen Aufgaben erfolgreich abgeschlossen werden oder nicht. –

Antwort

0

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.

1

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.

+0

Vereinbaren Sie mit Mathias, Spring Async sieht die beste Lösung. –

Verwandte Themen