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!