【发布时间】:2020-04-15 16:35:32
【问题描述】:
我正在尝试实现一种轮询机制。我想根据某些条件增加或减少轮询间隔。我正在使用 Mono.repeat 和 delayElements 来执行间隔的重复任务。但我无法找到一种方法来根据某些标准修改延迟.
Mono.just(1).
repeat().
delayElements(getPollingInterval()).
takeUntil((s)->
{
if(checkForEndCriteria()){
log.info("Critera to end reached);
return true;
}
return false;
}).
log().
subscribeOn(Schedulers.boundedElastic()).
flatMapSequential(x -> {
List<Event> eventList = getEvents(id, lastItemTimeStamp);;
if (!eventList.isEmpty()) {
//Recieving events now. So want to decrease the interval.
return Flux.fromIterable(eventList);
} else {
//There are no events happening .So I would like
//to increase the delay of repeat task by 1 sec
return Flux.just(buildHeartBeatEvent());
}
}).
onErrorResume(error -> {
log.error("Error occurred", error);
return Flux.error(error);
});```
【问题讨论】:
-
为什么要用reactor来轮询?
标签: spring-boot project-reactor reactor