"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment exécuter une tâche asynchrone dans Spring WebFlux sans bloquer la réponse principale ?

Comment exécuter une tâche asynchrone dans Spring WebFlux sans bloquer la réponse principale ?

Publié le 2024-08-07
Parcourir:934

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

Je travaille avec Spring WebFlux et je dois effectuer une tâche asynchrone dans le cadre d'une méthode qui ne doit pas bloquer la réponse principale à l'utilisateur. Plus précisément, je souhaite appeler une méthode asynchrone après avoir terminé la tâche principale, mais sans retarder la réponse.

Voici une version simplifiée de ce que j'essaie de réaliser :

public Mono 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 doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) {
    return Mono.delay(Duration.ofSeconds(5))
        .then(); // Converts the delayed Mono to Mono
}

Une fois cet appel terminé, je souhaite exécuter doSomethingInAsync(requestDTO, ResponseDTO) de manière asynchrone.
La méthode doSomethingInAsync doit être non bloquante et ne pas retarder la réponse principale.
Problème:

La méthode doSomethingInAsync est en cours d'exécution, mais il semble qu'elle bloque la réponse ou ne s'exécute pas de manière asynchrone comme prévu. Comment puis-je m'assurer que doSomethingInAsync s'exécute de manière asynchrone et ne bloque pas la réponse à l'utilisateur ?

Détails:

publishPackageService.doSomething(requestDTO) : renvoie un Mono.
doSomethingInAsync(requestDTO, ResponseDTO) : est une méthode asynchrone que je souhaite exécuter sans bloquer la réponse.

Des questions:

Comment puis-je m'assurer que doSomethingInAsync s'exécute en arrière-plan sans bloquer la réponse ?

Déclaration de sortie Cet article est reproduit sur : https://dev.to/subrata71/how-to-run-an-asynchronous-task-in-spring-webflux-without-blocking-the-main-response-57d7?1S'il y en a infraction, veuillez contacter [email protected] pour supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3