【问题标题】:Scheduler in a java spring boot microservicejava spring boot微服务中的调度程序
【发布时间】:2018-04-11 14:06:10
【问题描述】:

我们有一个使用 Spring boot 编写的微服务,它有自己的 NoSQL 数据存储。我们正在开发功能,我们希望删除一些旧数据(50 万份文档),并希望根据数据存储中特定类型记录的存在定期(每天一次)执行此操作。

是否有一个每天运行一次并进行删除的调度程序,这是一种正确的方法吗?此外,由于它是一个微服务,并且它的多个实例将运行,我们如何控制该调度程序仅在一个实例上运行?

【问题讨论】:

  • 另外,由于它是一个微服务并且它的多个实例将运行,我们如何控制这个调度程序只在一个实例上运行?这里的实例是什么意思?每个微服务都将作为具有自己数据库的单独应用程序运行。
  • 这里的实例是指同一个应用程序/微服务的不同JVM,并且在每个JVM中应用程序连接到同一个数据库实例。

标签: java spring-boot scheduler microservices


【解决方案1】:

我现在可以想到多种选择:

  1. 如果部署了单个微服务实例,您可以使用石英之类的工具来计时。
  2. 创建一个用于清理的RESTful API,使用脚本调用它,例如请参考https://stackoverflow.com/a/15090893/2817980。这将确保只有一个服务实例可以进行清理。
  3. 如果有主从副本,要求master只分配给1个实例
  4. 使用石英之类的东西创建一个计划作业,然后检查该作业是否已被 zookeeper/redis/db 或任何其他存储中的某个其他计划程序占用。

我可以对此进行更多讨论。

【讨论】:

  • 是的,请......您可以提供上述选项中的所有替代品
  • @LovaChittumuri 我建议的替代方案可以根据场景/要求应用。当我们完成要求时,我可能会提出另一件事。对我来说,根据目前提供的信息,看起来 Option#4 会更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2020-06-08
  • 2019-09-02
  • 2020-03-11
  • 2022-01-08
  • 2020-09-27
相关资源
最近更新 更多