小编use*_*440的帖子

等待所有 Mono 响应从下游 API 返回的正确方法是什么

我对 Mono 和 Flux 还很陌生。我正在尝试加入几个下游 API 响应。这是一个传统的阻塞应用程序。我不想收集 Mono 列表,我想要从下游 API 返回的有效负载列表,我从 Mono 获取该列表。然而,返回到控制器的“结果”有时只有一些或没有下游 API 响应。这样做的正确方法是什么?我读过几篇文章如何迭代 Flux 并与 Mono状态混合

你不应该在网络应用程序的任何地方调用 subscribe 。如果这绑定到 HTTP 请求,那么您基本上会触发反应式管道,而无法保证资源或完成情况。调用 subscribe 会触发管道,但不会等到它完成

我应该使用 CompletableFuture 吗?

在我的服务中我尝试过

var result = new ArrayList<List<>>();
List<Mono<X>> monoList = apiCall();
Flux.fromIterable(monoList)
            .flatMap(m -> m.doOnSuccess(
                        x -> {  
                            result.add(x.getData());
                        }
        )).subscribe();
Run Code Online (Sandbox Code Playgroud)

我还在控制器中尝试了以下操作,但该方法返回而不等待订阅完成

var result = new ArrayList<List<X>>();
        Flux.concat(
                this.service.callApis(result, ...)
        ).subscribe();
        return result;
Run Code Online (Sandbox Code Playgroud)

在我的服务中

public Mono<Void> callApis(List<List<x>> result, ..) {
...
return Flux.fromIterable(monoList)
                .flatMap(m -> m.doOnSuccess(
                        x -> {  
                            result.add(x.getData()...);
                        } …
Run Code Online (Sandbox Code Playgroud)

java reactive-programming project-reactor spring-webflux

5
推荐指数
1
解决办法
4518
查看次数