[英]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.