Heim > Java > javaLernprogramm > Wie führe ich eine asynchrone Aufgabe in Spring WebFlux aus, ohne die Hauptantwort zu blockieren?

Wie führe ich eine asynchrone Aufgabe in Spring WebFlux aus, ohne die Hauptantwort zu blockieren?

PHPz
Freigeben: 2024-07-28 07:37:06
Original
1058 Leute haben es durchsucht

How to Run an Asynchronous Task in Spring WebFlux Without Blocking the Main Response?

Ich arbeite mit Spring WebFlux und muss eine asynchrone Aufgabe als Teil einer Methode ausführen, die die Hauptantwort an den Benutzer nicht blockieren sollte. Konkret möchte ich nach Abschluss der Hauptaufgabe eine asynchrone Methode aufrufen, ohne jedoch die Antwort zu verzögern.

Hier ist eine vereinfachte Version dessen, was ich erreichen möchte:

public Mono<ResponseDTO> publishPackage(RequestDTO requestDTO) {
    return publishPackageService.doSomething(requestDTO)
        .flatMap(responseDTO -> 
            doSomethingInAsync(requestDTO, responseDTO)
                .thenReturn(responseDTO)
        );
}

// Method that simulates an asynchronous task with a 5-second delay
public Mono<Void> doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) {
    return Mono.delay(Duration.ofSeconds(5))
        .then(); // Converts the delayed Mono<Long> to Mono<Void>
}

Nach dem Login kopieren

Nachdem dieser Aufruf abgeschlossen ist, möchte ich doSomethingInAsync(requestDTO, ResponseDTO) asynchron ausführen.
Die doSomethingInAsync-Methode sollte nicht blockierend sein und die Hauptantwort nicht verzögern.
Problem:

Die doSomethingInAsync-Methode wird ausgeführt, aber es scheint, als würde sie die Antwort blockieren oder nicht wie beabsichtigt asynchron ausgeführt werden. Wie kann ich sicherstellen, dass doSomethingInAsync asynchron ausgeführt wird und die Antwort an den Benutzer nicht blockiert?

Details:

publishPackageService.doSomething(requestDTO): Gibt ein Mono zurück.
doSomethingInAsync(requestDTO, ResponseDTO): Ist eine asynchrone Methode, die ich ausführen möchte, ohne die Antwort zu blockieren.

Fragen:

Wie kann ich sicherstellen, dass doSomethingInAsync im Hintergrund ausgeführt wird, ohne die Antwort zu blockieren?

Das obige ist der detaillierte Inhalt vonWie führe ich eine asynchrone Aufgabe in Spring WebFlux aus, ohne die Hauptantwort zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage