PCF解决方案将spring @Scheduled作业限制为仅在云环境中的一个实例中运行

问题描述 投票:0回答:1

我在Pivotal Cloud Foundry(PCF)中有一个春季@Scheduled作业,该作业可以在多个实例中运行,但是我想限制它只能在PCF云环境中的一个实例中运行。

PCF是否为此提供任何现成的解决方案,还是我们需要对代码进行更改?

任何建议对我实施都有帮助。

spring-boot scheduled-tasks pivotal-cloud-foundry spring-scheduled pcf
1个回答
0
投票

进行此工作的一种方法是查看INSTANCE_INDEXCF_INSTANCE_INDEX(它们是相同的)环境变量。这将具有您的应用程序实例的实例号。它是从零开始的,因此它等于您拥有的应用程序实例数减去一个1(例如:5个AI == 0-4)。

有多种方法可以在您的应用程序中实现此功能,但高级的想法是,您选择一个索引号并对其进行设置,以便仅在该索引号上运行调度。通常选择零,因为总是有第零个实例,但是您可以在任何索引上运行它。

关于实现此目标的方法:

  • 您的计划作业可以检查env变量,如果不是零索引,那么它就可以成功完成。
  • 如果不在零索引上运行,则可以禁用调度。
  • 您可以将调度配置包装在Spring配置文件中,并且仅在第零个索引上启用该配置文件。
  • 您可以使用@Conditional并创建用于检查env变量索引的自定义org.springframework.context.annotation.Condition

我确定还有其他选择。这些只是我头顶上的那些。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.