当前位置: 首页 > 知识库问答 >
问题:

SpringBoot WebFlux-生成并行WebClient请求

苏洛城
2023-03-14

我试图使用新的SpringBoot2 Reactive WebClient类(它没有批处理endpoint)对同一个rest服务进行并行(批处理)调用。例如,我需要100个“comment”对象(ids为1...100),我正在执行以下并行调用:

    List<Mono<Comment>> monos = ids.stream()
            .map(id -> webClient.get()
                    .uri("/comments/{id}", id)
                    .accept(MediaType.APPLICATION_JSON)
                    .retrieve()
                    .bodyToMono(Comment.class))
            .collect(Collectors.toList());

    return Flux.merge(monos);

我是Spring WebFlux的新手,我不确定这是否是用WebClient进行并行调用的正确方法

>

  • 有没有更好(更合适)的方法来做这件事(即做一个单声道的通量连接)?

  • 共有1个答案

    田修为
    2023-03-14
    Flux.fromIterable(ids)
      .flatMap(id -> webClient.get()
        .uri("/comments/{id}", id)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(Comment.class))
      .subscribeOn(Schedulers.parallel());
    
     类似资料:
    • 我正在用spring WebClient对API进行并行rest调用。响应如下所示 POJOS: 获取产品 这也是有效的,但是有没有一种方法可以直接返回,或者返回更好? (下一步是将产品保存在数据库中)

    • 块状应用程序通常生成JavaScript作为其输出语言,通常在网页(可能是同一网页或嵌入式WebView)中运行。 像任何生成器一样,第一步是导入javascript生成器。 对于Web Blockly,请在blockly_compressed.js之后添加javascript_compressed.js: <script src="blockly_compressed.js"></script>

    • 我需要一些使用RxJava2实现并行异步调用的帮助 1) 我有多个保险公司(目前我只接受两个),我需要使用该保险公司的名称发送多个并行请求。 2)如果其中任何一个给服务器错误,那么剩余的请求不应该被阻止。 以下是我迄今为止所做的尝试; 现在,只有当两个请求都成功响应时,上述代码才能正常工作。但是当任何请求作为内部服务器错误给出响应时,其余请求也会被阻止。 当任何请求给出失败响应时,我得到以下日志错

    • 是否可以在webclient上将多个请求链接在一起?例如,我希望在进行交易时能够更新买方和卖方的余额。现在它只更新买家余额: 是否有一种方法可以将两个put方法调用在一起,以便更新两个余额? 更新:此方法适用于将单声道值作为uri变量调用。

    • 我想获取有关从后端服务到其他第三方服务的呼叫的指标(呼叫数,95%)。我正在使用WebClient进行这些http调用。我找不到启用WebClient直方图指标的特定属性。 我添加了MetricsWebClientFilterFunction来生成指标。这就是逻辑-

    • 我在openapi v.3规范中有一个模型。我使用openapi生成器maven插件为库webclient(spring 5-webflux)生成java客户端。我想发送回客户端文件和http头。生成的代码没有获取响应标头的方法。 为客户端生成的代码不包含提供对响应头访问的代码。例如,如果我使用库resttemplate,则有一个方法public MultiValueMap getResponse