spring-webflux - Spring Webflux:进行一次 API 调用,然后进行多次并行调用
问题描述
我先说我是 WebFlux 和响应式编程的新手,我正在努力跟上最佳模式和实践的步伐。
但是我正在寻找一种方法来进行许多并行 api 调用,只有在我成功地进行另一个单独的 API 调用之后。
像这样的东西
Mono<someReturnObject> saveStateOfMultipleObjectsinTheDB(SO request){
Mono<String> 1stCallResult = saveFirstObject(request.getFirstObject());
Mono.zip(saveSecondObject(request.getSecondObject().subscribeOn(Schedulers.elastic()), saveThirdObject(request.getThirdObject().subscribeOn(Schedulers.elastic())).map(this::maptoSomeReturnObject())
}
现在这是一个轻微的简化。理想情况下,我想在这些 zip 方法中的每一个中编写一个 lambda 函数,但如果我必须编写一个函数,就像这里描述的那样。但是我的想法对这种模式正确吗?
解决方案
您走在正确的轨道上,您只需要使用then
运算符在第一个并发调用之后链接两个并发调用。此外,subscribeOn
如果您在后台使用响应式客户端(如WebClient
),则无需在评论中讨论。
Mono<SomeReturnObject> saveStateOfMultipleObjectsinTheDB(SO request) {
return saveFirstObject(request.getFirstObject())
.then(Mono.zip(
saveSecondObject(request.getSecondObject()),
saveThirdObject(request.getThirdObject())))
.map(this::maptoSomeReturnObject);
}
推荐阅读
- c# - Azure App Function (Functions 2.x):通过 HTTP 函数在 CosmosDB 中创建新文档
- mysql - 选择数据库中最后一次插入超过 X 天的项目
- javascript - 从响应中获取元素位置
- android - 使用两个不同的 id 发布同一个应用程序
- docker - Docker:本地主机上暴露端口的连接被拒绝
- bash - shell vs 终端 vs 命令行 vs BASH?
- python - fcntl.lockf 在文件的上下文管理器中
- powershell - Powershell foreach 和 export-csv 不起作用
- c - 我如何传递指针参数有什么问题吗?
- android - 任务 ':app:processDebugResources' 执行失败。无法执行 aapt Ionic 4 android