【发布时间】:2017-10-16 02:45:54
【问题描述】:
我正在开发一个 Spring Webflux 项目,在计划任务中尝试发布和使用 Flux 时遇到了问题。
@Scheduled(fixedRate = 20*1000)
fun updateNews() {
try {
logger.info("Automatic Update at: ${LocalDateTime.now()}")
articleRepository.saveAll(
sourceRepository.findAll().publishOn(Schedulers.parallel())
.map { source -> source.generate() }
.flatMap { it?.read() ?: Flux.empty() })
.timeout(Duration.ofSeconds(20)
).subscribeOn(Schedulers.parallel())
} catch(e: Throwable) {
logger.log(Level.SEVERE, "Error in Scheduler", e)
}
}
我配置的调度器:
ConcurrentTaskScheduler(Executors.newScheduledThreadPool(3))
除非我在最后故意阻止,否则这个任务永远不会完成:
.then().block()
我最初并没有为直接引用发布/订阅调度程序而烦恼,并且我尝试了所有看似合理但无效的选项。
我的日志事件发生了,但似乎当调度程序执行此任务的线程死亡时,通量也是垃圾;即使我指定了 publishOn 和 subscribeOn 行为后它们应该在自己的线程池中?
我想让这个动作完全反应,任何建议都将不胜感激。
【问题讨论】:
标签: project-reactor spring-webflux