我想使用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个线程?
暂无答案!
目前还没有任何答案,快来回答吧!