簡體   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