"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como executar uma tarefa assíncrona no Spring WebFlux sem bloquear a resposta principal?

Como executar uma tarefa assíncrona no Spring WebFlux sem bloquear a resposta principal?

Publicado em 2024-08-07
Navegar:183

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

Estou trabalhando com Spring WebFlux e preciso realizar uma tarefa assíncrona como parte de um método que não deve bloquear a resposta principal ao usuário. Especificamente, quero chamar um método assíncrono após concluir a tarefa principal, mas sem atrasar a resposta.

Aqui está uma versão simplificada do que estou tentando alcançar:

public Mono 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 doSomethingInAsync(RequestDTO requestDTO, ResponseDTO responseDTO) {
    return Mono.delay(Duration.ofSeconds(5))
        .then(); // Converts the delayed Mono to Mono
}

Após a conclusão desta chamada, desejo executar doSomethingInAsync(requestDTO, responseDTO) de forma assíncrona.
O método doSomethingInAsync não deve bloquear e não atrasar a resposta principal.
Problema:

O método doSomethingInAsync está sendo executado, mas parece que pode estar bloqueando a resposta ou não sendo executado de forma assíncrona conforme pretendido. Como posso garantir que doSomethingInAsync seja executado de forma assíncrona e não bloqueie a resposta ao usuário?

Detalhes:

publishPackageService.doSomething(requestDTO): Retorna um Mono.
doSomethingInAsync(requestDTO, responseDTO): É um método assíncrono que desejo executar sem bloquear a resposta.

Questões:

Como posso garantir que doSomethingInAsync seja executado em segundo plano sem bloquear a resposta?

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/subrata71/how-to-run-an-asynchronous-task-in-spring-webflux-without-blocking-the-main-response-57d7?1Se houver algum violação, entre em contato com [email protected] para excluir
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3