spring-boot - 同步调用多个api,spring boot webflux

标签 spring-boot spring-webflux spring-webclient

在我的项目中,我们使用 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/

相关文章:

spring-boot - 是否有使用 WebFlux 的 OAuth2 工作示例

spring - 是否可以通过证书仅保护一个 spring boot rest 端点?

java - @SpringBootTest 不使用测试属性

java - postgres r2dbc-pool 的连接池大小

java - 如何将基本 URI 设置为 Spring WebClient

spring-boot - WebFlux WebClient 在分段上传期间将整个文件加载到直接缓冲区内存中

java - 限制 JdbcPagingItemReader 在 Spring Batch 项目中可以读取的总记录数

java - WebFlux DataBufferLimitException : Part headers exceeded the memory usage limit of 8192 bytes

java - 如何在 Spring WebClient 中验证 bean?

java - 尝试提供图像时如何解决 Spring 中的 "No converter for [class [B] with preset Content-Type ' image/png'"错误?