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 中国語 Web サイトの他の関連記事を参照してください。