簡體   English   中英

Spring @Async 與 Spring WebFlux

[英]Spring @Async vs Spring WebFlux

我正在嘗試使用 WebFlux 轉換以下方法,以避免在相同的情況下使用 @Async。

@Async
@Override
public void notifyCallback(NotifyCallbackRequest request, String id) {

        startProcess(id);

}

Controller class:

@ResponseStatus(HttpStatus.OK)
@PostMapping("/notify-status/{id}")
public void notifyCallback(@PathVariable("id") String id, @RequestBody NotifyCallbackRequest request) {
    identityService.notifyCallback(request, id);
}

startProcess(id) 是一種通過 webflux 進行 api 調用並返回 Mono 類型的方法。 我感興趣的是調用者會立即收到一個 ResponseStatus (HttpStatus.OK),盡管接下來會發生什么。

您可以獨立於您的主反應鏈訂閱您的“異步”任務,以便在調用端點后立即開始使其在后台運行。

@Override
public void notifyCallback(NotifyCallbackRequest request, String id) {
        startProcess(id).subscribe();
}

@ResponseStatus(HttpStatus.OK)
@PostMapping("/notify-status/{id}")
public Mono<Void> notifyCallback(@PathVariable("id") String id, @RequestBody NotifyCallbackRequest request) {
    identityService.notifyCallback(request, id);
    return Mono.empty();
}

您可以使用以下端點示例演示此行為。 如果您調用端點,它將立即 200 和 10 秒后它會登錄到您的控制台

@RequestMapping(path = "/async", method = RequestMethod.GET)
public Mono<Void> start() {
    Mono.delay(Duration.ofSeconds(10))
            .doOnNext(i -> LOGGER.info("we have waited 10 seconds"))
            .subscribe();

    return Mono.empty();
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM