我相信有更好的方法可以做到这一点,但我在webflux上有了新的开始,而且还在学习
我有一个需求,我需要为一个服务对不同的web服务进行异步调用(每次都是相同的端点,使用不同的queryparameters,所以称它为不同的服务)。存在动态的下游呼叫数
服务[a]——服务B[1]、服务B[2]、服务B[3]、服务B[4]等
现在,当我从serviceb[n]的每个示例得到响应时,我需要知道“this”响应是针对哪个请求的(1、2、3、4等等)。原因是我需要在请求的末尾附加thai,以便按特定顺序作为响应发送。它们需要按照与原始请求相同的顺序追加因此,我需要确定对其请求的响应)。我正在给一个名单,上面有他们被要求的顺序。
我有下面的代码,它的工作功能。i、 e.当我向服务-a发出一个请求时(即从4个呼叫到4个服务-b呼叫)
但是,当存在对service-a的并行请求时,我看到flux.merge(asyncrequestlist).collectlist().block()调用不会等待所有resposne,并且仍然从方法返回。所以我错过了一些回答。
public List<ResultSet> invoke(List<ResultSet> requestPayload) {
String endpoint = "https://ourserver.hostname.com/our-service/api/v1/context?reference={servicereference}"
List<ResultSet> responsePayload = requestPayload;
ArrayList<Mono<String>> asyncRequestList = new ArrayList<>();
/*
"Request" is a Pojo with 4 fields
JsonNode request;
String reference;
JsonNode response;
int order;
*/
for (Requests req : requestPayload) {
asyncRequestList.add(
req.getOrder(),
webClient.post()
.uri(new UriTemplate(endpoint).expand(reference))
.body(BodyInserters.fromValue(req.getRequest()))
.retrieve()
.bodyToMono(String.class)
.timeout(Duration.ofSeconds(20)));
// register the callback
asyncRequestList.get(req.getOrder()).subscribe(s2 -> {
logger.info("Got response :: Request Id : {}, for Reference{}",
req.getRequestId(), req.getReference());
responsePayload.get(req.getOrder()).setResponse(mapper.mapFromString(s2));
});
}
//wait for all responses
Flux.merge(asyncRequestList).collectList().block();
logger.info("Got all responses. ");
return responsePayload;
}
有人能给我指出正确的方向吗?我可以使用什么工具来调试它(任何网络监视器等)
暂无答案!
目前还没有任何答案,快来回答吧!