【发布时间】:2021-10-21 16:11:46
【问题描述】:
我想处理Flux 以限制Mono 列表发出的并发HTTP 请求。
当一些请求完成时(收到响应),然后服务请求另一个,直到等待请求的总数为 15。
单个请求返回一个列表并根据结果触发另一个请求。
此时,我想以有限的并发性发送请求。 因为消费者端,太多的 HTTP 请求会让对端的服务器陷入困境。
我使用了flatMapMany,如下所示。
public Flux<JsonNode> syncData() {
return service1
.getData(param1)
.flatMapMany(res -> {
List<Mono<JsonNode>> totalTask = new ArrayList<>();
Map<String, Object> originData = service2.getDataFromDB(param2);
res.withArray("data").forEach(row -> {
String id = row.get("id").asText();
if (originData.containsKey(id)) {
totalTask.add(service1.updateRequest(param3));
} else {
totalTask.add(service1.deleteRequest(param4));
}
originData.remove(id);
});
for (left) {
totalTask.add(service1.createRequest(param5));
}
return Flux.merge(totalTask);
});
}
void syncData() {
syncDataService.syncData().????;
}
我尝试链接.window(15),但它不起作用。所有请求同时发送。
我如何处理Flux 以实现我的目标?
【问题讨论】:
标签: java spring spring-webflux project-reactor