I'm working with Spring WebFlux and I need to perform an asynchronous task as part of a method that should not block the main response to the user. Specifically, I want to call an asynchronous method after completing the main task, but without delaying the response.
Here's a simplified version of what I'm trying to achieve:
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> }
After this call completes, I want to execute doSomethingInAsync(requestDTO, responseDTO)
asynchronously.
The doSomethingInAsync method should be non-blocking and not delay the main response.
Problem:
The doSomethingInAsync
method is being executed, but it seems like it might be blocking the response or not running asynchronously as intended. How can I ensure that doSomethingInAsync
runs asynchronously and does not block the response to the user?
Details:
publishPackageService.doSomething(requestDTO): Returns a Mono.
doSomethingInAsync(requestDTO, responseDTO): Is an asynchronous method that I want to run without blocking the response.
Questions:
How can I ensure doSomethingInAsync runs in the background without blocking the response?
Top comments (0)