首页 > 解决方案 > Spring Boot - WebFlux 在并行运行时将结果的上下文与 id 保持一致

问题描述

使用 Spring Boot 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);
    }

标签: javaspring-bootspring-webfluxspring-webclient

解决方案


来自@ThomasAndolf 评论

通过不Mono<Map>从您的callApi函数返回 a 。返回一个MapId包装对象,您可以稍后使用它重新映射到您想要的结构.bodyToMono(Map.class).flatMap(map -> { return Mono.just(new Response(id, map)); });– Thomas Andolf 22 小时前


推荐阅读