繁体   English   中英

获取在 Pivotal Cloud Foundry 上运行的应用程序的实例 ID

[英]get the instance id of an application which is running on Pivotal Cloud Foundry

我们有一个部署在Pivotal Cloud Foundry上的 springboot 应用程序(文件读取/写入)。 目前,只有一个实例在运行,但现在我们被迫将实例数增加到 2(由于公司政策/标准等)。 如果我们扩展到 2,我们的应用程序将不会按预期 100% 工作,它可能会单独处理同一个文件,这可能会导致问题。

所以,我的问题是,

  1. 有什么办法,我们可以为每个实例单独设置cron调度程序? 或者
  2. 在 spring 引导应用程序中,是否有任何方法可以传递实例编号或 ID 或任何标识,说这是实例 1 或 2?,以便我可以限制某个实例的执行。

我经常看到的一种可能性是查看CF_INSTANCE_INDEX 它是一个从零开始的索引,指示哪个实例正在运行。

我看到的典型做法是应用程序查看它是否为零索引,然后启用某些功能。 如果其索引大于零,则关闭相同的功能。 这样,功能(如调度程序)仅在第一个实例上运行。

您必须记住,通过这样做,您的调度程序只会在一个实例上运行,如果该实例出现故障,调度程序可能会错过它应该触发的事件。 这可能重要也可能不重要,具体取决于您的应用程序要求以及您使用的调度程序在崩溃后重新启动时的行为方式(也许它会赶上来?)。

另一种可能性是考虑一个更分布式的调度器,一个可以处理多个 worker 的调度器。 不是认可,但Jobrunr是 Java 空间中的一个例子。 我敢肯定其他人同时存在于 Java 和其他语言中。 这些工具的特点是它们可以跨多个进程/容器/VM 协调工作,这样您就不会多次运行作业。

 @Value("${CF_INSTANCE_INDEX}")                                                                                                  
 private int intanceIndex; 

只需添加以上几行,我们就可以在应用程序中获取从0开始的实例索引。

谢谢@Daniel Mikusa

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM