我写了这段代码来分拆大量的WebClients(受 reactor.ipc.netty.workerCount 限制),立即启动Mono,等待所有Monos完成:
List>> monos = new ArrayList<>(metricConfigs.size());
for (MetricConfig metricConfig : metricConfigs) {
try {
monos.add(extractMetrics.queryMetricData(metricConfig)
.doOnSuccess(result -> {
metricDataList.addAll(result);
})
.cache());
} catch (Exception e) {
}
}
Mono.when(monos)
.doFinally(onFinally -> {
Map latestMap;
try {
latestMap = extractInsights.queryInsights();
Transform transform = new Transform(copierConfig.getEventType());
ArrayList eventList = transform.toEvents(latestMap, metricDataList);
} catch (Exception e) {
log.error("copy: mono: when: {}", e.getMessage(), e);
}
})
.block();
它“有效”,即结果如预期 .
两个问题:
这是对的吗? cache() 会导致 when 等待所有Monos完成吗?
效率高吗?有没有办法让这更快?
谢谢 .