首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个单声道和通用订户

多个单声道和通用订户
EN

Stack Overflow用户
提问于 2020-04-08 15:42:55
回答 1查看 191关注 0票数 0

我是一个用Java进行反应式编程的新手。我计划使用spring-webclient而不是restclient,因为后者正在退役。当我向不同的端点发出几个http post请求,并且响应结构相同时,我会遇到这种情况。使用如下所示的With客户端代码,

代码语言:javascript
复制
List<Mono<CommonResponse>> monolist = new ArrayList<>();
for(String endpoint : endpoints) {
  Mono<CommonResponse> mono = webClient.post()
     .uri(URI.create(endPoint))
     .body(Mono.just(requestData), RequestData.class)
     .retrieve()
     .bodyToMono(CommonResponse.class);
  monolist.add(mono);
}

每次请求我都会得到一个单声道。由于响应是常见的,我希望每个单声道都订阅一个公共方法,但假设响应数据没有帮助,我如何区分端点。我可以在订阅时向该方法传递额外的参数吗?

EN

回答 1

Stack Overflow用户

发布于 2020-04-08 16:31:20

您可以通过以下方式完成此操作。如果你有很多Mono,你可以把team看作flux,这实际上意味着你有很多Mono。然后你可以用一种方法订阅所有的内容。要向订阅方法传递一些额外的参数,比如有关端点的信息,您可以创建带有额外信息的额外对象。

代码语言:javascript
复制
Flux<ResponseWithEndpoint> commonResponseFlux = Flux.fromIterable(endpoints)
                .flatMap(endpoint -> webClient.post()
                        .uri(URI.create(endpoint))
                        .body(Mono.just(requestData), RequestData.class)
                        .retrieve()
                        .bodyToMono(CommonResponse.class)
                        .map(response -> new ResponseWithEndpoint(response, endpoint)));
...
class ResponseWithEndpoint {
    CommonResponse commonResponse;
    String endpoint;

    public ResponseWithEndpoint(CommonResponse commonResponse, String endpoint) {
        this.commonResponse = commonResponse;
        this.endpoint = endpoint;
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61095613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档