gpt4 book ai didi

java - Spring Flux 和 Async 注释

转载 作者:行者123 更新时间:2023-12-04 11:24:43 25 4
gpt4 key购买 nike

我有一个 Spring Flux 应用程序,在某些时候我需要在后台执行一些繁重的任务,调用者(HTTP 请求)不需要等到该任务完成。

如果没有反应器,我可能只会使用 Async注释,在不同的线程上执行该方法。
对于reactor,我不确定是否应该继续采用这种方法,或者是否已经有内置机制可以实现这一点。

例如,给定一个接受 Resource 对象的 Controller:

@PostMapping("/create")
public Mono<Resource> create(@Valid @RequestBody Resource r) {
processor.run(r); // the caller should not wait for the resource to be processed
return repository.save(r);
}

和一个处理器类:
@Async
void run(Resource r) {
WebClient webClient = WebClient.create("http://localhost:8080");
Mono<String> result = webClient.get()
.retrieve()
.bodyToMono(String.class);
String response = result.block(); //block for now
}
/create 的 HTTP 调用方应该不需要等到 run方法完成。

最佳答案

如果您正在寻找即发即弃模式的实现,您可以订阅您的发布者

@PostMapping("/create")
public Mono<Resource> create(@Valid @RequestBody Resource r) {
run(r).subscribe();
return repository.save(r);
}

Mono<Void> run(Resource r) {
WebClient webClient = WebClient.create("http://localhost:8080");
return webClient.get()
.retrieve()
.bodyToMono(String.class)
.then();
}

如果您的发布者执行阻塞操作,则应在具有弹性或并行调度程序的其他线程上订阅它。

关于java - Spring Flux 和 Async 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com