【发布时间】:2020-07-31 10:33:17
【问题描述】:
情况如下: 我发送了第一个请求,然后我以 5s 的间隔重复发送了第二个请求。如果第二个请求获得成功响应,我将其保存在数据库中并执行一些操作,如果它获得不成功(完成)响应,则应重复请求。当尝试大于 3 时,我需要停止重复第二个请求。我该怎么做?
return firstRequestSenderService.send(request)
.flatMap(resp -> {
AtomicInteger attempts = new AtomicInteger(0);
String url = normalizeUrl(resp.getResult());
return Mono.defer(() -> {
log.info("Second request, attempt = {}, params = {}", attempts.get(), param);
return secondRequestSenderService.send(param, url, attempts.getAndIncrement());
})
.filter(this::isCompleteResponse)
// i try .filter(b -> attempts.get() > 2)
.doOnNext(r -> log.info("Save report"))
.map(secondResp -> dataSaver.saveReport(param, secondResp))
.doOnNext(r -> log.info("Send request to another service"))
.flatMap(r -> secondRequestSender.sendPdf(r)))
.doOnNext(bytes -> dataSaver.saveAnotherReport(param, bytes))
.repeatWhenEmpty(req -> Flux.interval(Duration.ofSeconds(5)));
// also try .repeatWhenEmpty(3, req -> Flux.interval(Duration.ofSeconds(5)));
})
.then(Mono.empty());
【问题讨论】:
标签: java spring mono project-reactor flux