Spring Boot - WebFlux 在 运行 i parallel 时使用 id 保留结果上下文

Spring Boot - WebFlux keep context of result with id when running i parallel

使用 Spring 引导 Web 客户端从 REST API 请求 JSON,来自服务器的响应正文存储在一个简单的 Map 中。对服务器的请求包含一个 ID,但这不包含在响应中,但需要它来解释响应。

我想在并行调用的结果中包含 id,所以而不是 List<Map> data 应该是 Map<UUID,Map> data 或类似的。因此来自服务器的响应与用于获取响应的 ID 配对。

        List<Map> data = Flux.fromIterable(ids)
                .parallel()
                .runOn(Schedulers.elastic())
                .flatMap(this::callAPI).sequential().collectList().block();
    private Mono<Map> callAPI(UUID id) {
        return client.get().uri(uriBuilder -> uriBuilder
                .path("/{id}/")
                .build(id))
                .retrieve().bodyToMono(Map.class);
    }

来自@ThomasAndolf 评论

By not returning a Mono<Map> from your callApi function. Return a Map and the Id in wrapper object that you can later use to remap to your wanted structure .bodyToMono(Map.class).flatMap(map -> { return Mono.just(new Response(id, map)); }); – Thomas Andolf 22 hours ago