在我的项目中,我们使用 spring boot webflux,我有这样的场景,我必须从特定微服务中同步调用多个 api。 例如
for(String api:apiNames){
//call api's
}
根据我的理解,webClient 是异步工作的,除非有人订阅它,否则它不会发布响应。
在我当前的场景中,我必须使用 Webclient,并且只有在成功执行前一个 api 后才必须调用每个 api。
注意:- API 响应可以是任何成功/失败
请帮助我实现这个同步调用
最佳答案
您可以使用#block()
方法使其同步。
单声道示例 ( https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#block-- )
例如在(异步)webflux Web 客户端上:
return webClient.get()
.uri(uri)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToMono(String.class)
.block();
上面的示例将等待执行任何下一行代码,直到收到响应。 之后您可以用同样的方式再次调用另一个 api。
编辑:正如评论中所指出的,我想添加一个警告,即使用#block()
效率不高,您应该尝试链接更多响应式(Reactive)调用并尽量避免使您的应用程序变得非响应式。
可以在这里找到包含更多详细信息的好帖子:https://stackoverflow.com/a/57365926/1326867
关于spring-boot - 同步调用多个api,spring boot webflux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71160993/