java - CompletableFuture - 跳过错误并仅获取验证数据
问题描述
如果 webclient 响应正常,我有一个特定的代码可以正常工作。如果有任何错误,则 get() 方法抛出错误并且线程永远阻塞。
@SneakyThrows
public List<ResponseData> validateExpression(List<RequestData> RequestDataList, Data data) {
System.out.println(Instant.now());
final List<Mono<ResponseData>> monoList = new ArrayList<>();
RequestDataList.parallelStream().forEach(requestData -> {
try {
ObjectMapper mapper = new ObjectMapper();
log.info("Diversity API request data:");
log.info(mapper.writeValueAsString(requestData));
Mono<ResponseData> monoResponse = webClient
.post()
.uri("http://...")
.contentType(MediaType.APPLICATION_JSON)
.header(API_KEY_HEADER, config.getApiKey())
.body(Mono.just(requestData), RequestData.class)
.retrieve()
.bodyToMono(ResponseData.class);
System.out.println("create mono response lazy initialization");
monoList.add(monoResponse);
} catch (Exception e) {
log.info(e.getMessage());
}
});
System.out.println(Instant.now());
CompletableFuture<List<ResponseData>> futureCount = new CompletableFuture<>();
List<ResponseData> responseDataList = new ArrayList<>();
Mono.zip(monoList, Arrays::asList)
.flatMapIterable(objects -> objects)
.doOnComplete(() -> {
futureCount.complete(responseDataList);
}).subscribe(responseData -> {
responseDataList.add((ResponseData) responseData);
});
return futureCount.get();
}
它与成功的案例一起工作正常。如果 webclient 有任何错误,它会抛出错误并且线程永远被阻塞。如何跳过错误并仅获取验证响应数据?在这种情况下如何避免死锁?
解决方案
推荐阅读
- java - 在 html 文件中发送具有多语言上下文的电子邮件的问题
- time-complexity - 什么时候可以用 g(n) 替换 f(n) 项?
- mysql - 数据库性能提升
- python - 需要拆分由多个分隔符分隔的文件内容并显示最长的长度行
- java - 如何检查两个图像是否与参考对象相似?
- php - 使用 PHP + cURL 通过 Mailgun API 发送带附件的电子邮件
- sql - 如何对一系列日期运行特定日期查询
- android - 写入文件系统花费的时间太长
- sql - MariaDB 中的 DATEADD
- css - PrimeNG 多选中 SelectItem 的 styleClass 属性