Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menjalankan Tugas Asynchronous dalam Spring WebFlux Tanpa Menyekat Respons Utama?

Bagaimana untuk Menjalankan Tugas Asynchronous dalam Spring WebFlux Tanpa Menyekat Respons Utama?

PHPz
PHPzasal
2024-07-28 07:37:06990semak imbas

How to Run an Asynchronous Task in Spring WebFlux Without Blocking the Main Response?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn