当前位置: 首页 > 知识库问答 >
问题:

在计划任务中使用Flux

夏华藏
2023-03-14

我正在从事一个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()

我最初没有费心直接引用发布/订阅计划程序,我尝试了所有看似合理但没有效果的选项。

我的日志事件发生了,但当来自调度程序的该任务的线程死亡时,通量也会被丢弃;即使在我指定发布和订阅行为后,它们应该在自己的线程池中?

我想使这个行动完全被动,任何建议将不胜感激。

共有1个答案

能旭
2023-03-14

@计划没有与Flux集成,因此如果您返回它,它将不知道如何处理Flux。结合这一事实,在Reactor(和一般的反应流)中,通常不会发生任何事情,直到您订阅(),您就可以开始看到哪里出了问题。

block()实际上是subscribe()的一种形式,这就是为什么一旦将其添加到代码中,它就会起作用。这实际上可能是最好的选择,因为您需要将一段反应式代码(从反应式存储)连接到命令式阻塞世界(您的@Scheduled fun)。

 类似资料:
  • 我已经使用java创建了特定于时区的计划任务事件。我的密码是贝娄。 但是问题是当调用这个方法时,它会很快运行这个任务。我需要每天12点在亚洲/科伦坡时区运行这项工作。那要怎么做?

  • 计划任务系统使用说明 新版计划任务为用户提供了以下功能 创建一个计划任务 修改一个计划任务 删除计划任务 查看一个namespace的所有计划任务 查看一个namespcae的某个计划任务详细内容 查看一个计划任务的执行状况 查看任务的日志 查看创建的计划任务列表和某个计划任务的详细信息。 点击计划任务v2,进入计划任务列表,在这里可以看到用户名下的所有计划任务,点击一个计划任务,可以看到该计划任

  • 我对Powershell脚本非常陌生,但尝试修改我在这里找到的脚本,以便在Windows 2012 R2中使用Powershell导入一些XML计划任务。 我已经成功地将计划的任务导入到根[任务计划程序库]使用此脚本。 问题似乎是调度任务需要导入到任务调度程序库下的子文件夹中,比如说“子任务” } 当我运行上述Powershell脚本时,我收到这个错误: 异常调用带有“7”参数的“注册任务定义”:

  • 我在parallelism 5上有一份flink的工作(目前!!)。其中一个richFlatMap流在打开(配置参数)方法中打开一个文件。在flatMap操作中,没有任何打开操作,它只是读取文件来搜索某些内容。(有一个实用程序类,它的方法类似于utilityClass.searchText(“abc”))。以下是样板代码: python脚本每天都会在特定时间更新此文件。因此,我还应该在flatMa

  • 我想每天使用Spring Boot发送电子邮件,用户指定发送时间,我使用石英来安排我的工作。电子邮件的收件人有(id、emailAddress、截止日期)电子邮件将发送给截止日期=今天X...(用户指定X)。例如:用户指定X是1号,所以我们对明天有截止日期的人感兴趣。 第1天:应用程序向截止日期为今天1的人发送电子邮件。。第二天:我希望应用程序在第二天将电子邮件发送给新的收件人,但使用下面的代码,

  • 亚马逊宣布了AWS Lambda(http://AWS.Amazon.com/Lambda/)。 产品说明包括: 计划任务 AWS Lambda函数可以由外部事件计时器触发,因此可以在定期计划的维护时间或非高峰时段运行函数。例如,您可以触发一个AWS Lambda函数,在非繁忙时间执行每晚的存档清理。 当我读到这篇文章时,我明白了我终于可以有一种方法来始终如一地完成“类似朋党”的任务。我想每天下午