我正在使用spring cloud数据流(1.3.0.RELEASE)。我想检测一个正在运行的任务,以防止同一任务的多个实例被启动。
我正在查看任务执行状态功能,特别是“结束时间”,但我注意到有时任务执行状态可以设置“开始时间”,同时“退出代码”设置为0并且“结束时间”未设置。 因此,“结束时间”看起来不像一个可行的决定因素。
实现这一目标的最佳方式是什么?
感谢。
答案 0 :(得分:0)
在SCDF级别,我们(尚未)具有将其作为业务流程层的一部分进行控制的本机能力。但是,有一些选择是可能的。
1)您可以让Task应用程序通过task-events
目的地(队列或主题)发出lifecycle events;它可以是标准类型或自定义事件。然后可以将流用作决定点以触发后续启动。
2)在最近的2.0 M3 release of Spring Cloud Task中,我们可以限制相同类型的多个Task实例的启动。对于每个任务启动,spring.cloud.task.singleInstanceEnabled=true
可以有效地控制这一点。设置此标志后,在启动Task实例时,将自动应用锁定检查。因此,可以防止重复或非预期的发射。
3)如果您无法切换到2.0 M3,理论上,您可以在基于1.x的任务应用程序中复制上面的#2解决方案。