Maison  >  Article  >  Java  >  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 ?

PHPz
PHPzoriginal
2024-07-28 07:37:06990parcourir

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<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>
}

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.

Questions :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn