java—如何限制并行SpringWebClient响应的处理?

eiee3dmh  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(238)

我想使用spring并行执行webservice请求 WebClient .
webservice大约需要10秒才能响应,因此我想一次发送20个请求。所以20个请求总是在等待响应。但是响应后面的进一步处理应该只在4个线程中继续。
问:我怎样才能做到这一点?
我试过:

//assume like 2000 requests
List<Object> requests = prepareRequests();

requests.parallelStream().forEach(req -> {
   JsonNode response = webClient.post()
      .bodyValue(req)
      ...
      .bodyToMono(JsonNode.class)
      .block();

   processFurther(response);
}

这将有助于至少在某种程度上并行地执行请求(取决于cpu),在我的例子中通常是4。
我继续把电话包在一个盒子里 ForkJoinPool 有20个螺纹:

ForkJoinPool myPool = new ForkJoinPool(20);
        myPool.submit(() ->
                requests.parallelStream().forEach(req -> {
                    //...same as above
                    JsonNode response = webClient.post()
                       .bodyValue(req)
                       ...
                       .bodyToMono(JsonNode.class)
                       .block();

                    processFurther(response);
                })
        ).get();

这是可行的,但是一旦响应返回,它就会被处理。因此,理论上,如果所有20个请求同时返回,那么所有请求都将由20个线程进一步处理。
问题:如何将进一步的处理限制为更少的线程,比如4个线程?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题