如何使用spring-boot微服务架构在一个实例上运行任务

时间:2016-09-11 13:04:05

标签: spring spring-boot spring-boot-actuator

需要一个名为AccountService.5的服务来支持流量。所有这些实例都在docker container中运行。现在我需要运行一个计划任务。此任务应该只在一个AccountService实例上运行。但是不是所有的五个实例。其中一个不重要

我的问题是如何配置来实现这一点.Can eureka可以这样做吗?zookeeper似乎有能力管理集群。我需要将AccountService注册到Zookeeper吗?

希望有人可以与我分享经验

3 个答案:

答案 0 :(得分:0)

考虑使用像Redis这样的共享数据存储,或者,如果您已经在数据库中使用数据库,则使用任务锁定。第一个出现的实例可以获取锁定,运行任务并释放锁定。

答案 1 :(得分:0)

使用基于Spring的任务调度@Schedule

更多click here

答案 2 :(得分:0)

  1. 在您的依赖项中包含 spring-cloud-task (适用于计划任务)。
  2. 然后启用此属性- spring.cloud.task.single-instance-enabled = true
  3. 添加 Spring集成依赖项。从此处复制/粘贴-https://docs.spring.io/spring-cloud-task/docs/current/reference/#features-single-instance-enabled

注意: 将创建锁并将其存储在TASK_LOCK表下。确保其干净,否则重新启动时会遇到问题。