Saya sedang bekerja dengan Spring WebFlux dan saya perlu melaksanakan tugas tak segerak sebagai sebahagian daripada kaedah yang tidak seharusnya menyekat respons utama kepada pengguna. Secara khususnya, saya ingin memanggil kaedah tak segerak selepas menyelesaikan tugas utama, tetapi tanpa melengahkan respons.
Berikut ialah versi ringkas tentang perkara yang saya cuba capai:
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> }
Selepas panggilan ini selesai, saya mahu melaksanakan doSomethingInAsync(requestDTO, responseDTO) secara tak segerak.
Kaedah doSomethingInAsync hendaklah tidak menyekat dan tidak melengahkan respons utama.
Masalah:
Kaedah doSomethingInAsync sedang dilaksanakan, tetapi nampaknya ia mungkin menyekat respons atau tidak berjalan secara tidak segerak seperti yang dimaksudkan. Bagaimanakah saya boleh memastikan bahawa doSomethingInAsync berjalan secara tidak segerak dan tidak menyekat respons kepada pengguna?
Butiran:
publishPackageService.doSomething(requestDTO): Mengembalikan Mono.
doSomethingInAsync(requestDTO, responseDTO): Merupakan kaedah tak segerak yang saya mahu jalankan tanpa menyekat respons.
Soalan:
Bagaimanakah saya boleh memastikan doSomethingInAsync berjalan di latar belakang tanpa menyekat respons?
Atas ialah kandungan terperinci Bagaimana untuk Menjalankan Tugas Asynchronous dalam Spring WebFlux Tanpa Menyekat Respons Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!