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 MonopublishPackage(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 doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) { return Mono.delay(Duration.ofSeconds(5)) .then(); // Converts the delayed Mono to Mono }
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?
Einzelheiten:
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?
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3