我正在使用 Spring WebFlux,我需要执行异步任务作为方法的一部分,该方法不应阻止对用户的主要响应。具体来说,我想在完成主任务后调用异步方法,但不延迟响应。
这是我想要实现的目标的简化版本:
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> }
此调用完成后,我想异步执行 doSomethingInAsync(requestDTO, responseDTO)。
doSomethingInAsync 方法应该是非阻塞的,并且不会延迟主要响应。
问题:
doSomethingInAsync 方法正在执行,但它似乎可能会阻止响应或未按预期异步运行。如何确保 doSomethingInAsync 异步运行并且不会阻止对用户的响应?
详情:
publishPackageService.doSomething(requestDTO):返回一个 Mono。
doSomethingInAsync(requestDTO, responseDTO):是一个异步方法,我想在不阻塞响应的情况下运行它。
问题:
如何确保 doSomethingInAsync 在后台运行而不阻塞响应?
以上是如何在 Spring WebFlux 中运行异步任务而不阻塞主响应?的详细内容。更多信息请关注PHP中文网其他相关文章!