2013-02-27 74 views
3

是否有可能得到你正運行在哪種情況下的信息?我想輸出一個簡單的標識符,以便爲日誌記錄目前運行代碼的實例。App Engine的實例ID

+0

的可能重複[我如何獲得應用程序引擎前端服務器的實例ID?](http://stackoverflow.com/questions/11731719/how-do-i-get-an-instance-id-of-應用程序引擎前端服務器) – 2013-02-27 10:03:00

+0

@PaulC:並非真正重複,該問題的主體涉及將請求轉發到特定應用引擎前端服務器的方式。 – 2013-02-27 11:39:16

+1

當然,第一個答案是這樣說的:app_instance_id = os.environ.get('INSTANCE_ID'),這是我認爲OP需要知道的。 – 2013-02-27 11:59:10

回答

3

由於沒有語言的標籤,看到您的個人資料的歷史,我假設你使用GAE/J?

在這種情況下,實例ID信息被嵌入到環境中的一個屬性,你可以通過ApiProxy.getCurrentEnvironment()方法得到。然後,您可以使用密鑰BackendService.INSTANCE_ID_ENV_ATTRIBUTE從結果地圖中提取實例ID。

即使密鑰存儲在BackendService,這種方式也將努力爲前端實例。因此,在總結,下面的代碼會爲你獲取實例ID:

String tInstanceId = ApiProxy.getCurrentEnvironment() 
          .getAttributes() 
          .get(BackendService.INSTANCE_ID_ENV_ATTRIBUTE) 
          .toString(); 

請記住,這種做法是相當受谷歌無證,並且可能隨時更改,恕不警示未來。但由於您的用例僅用於日誌記錄,我認爲現在就足夠了。

1

隨着Modules來臨,就可以得到當前實例ID在a more elegant way

ModulesServiceFactory.getModulesService().getCurrentInstanceId()

1

更妙的是,你應該換一個嘗試捕捉呼叫,使其正常工作在本地了。

導入此

import com.google.appengine.api.modules.ModulesException; 
import com.google.appengine.api.modules.ModulesServiceFactory; 

然後你的方法可以運行此

String instanceId = "unknown"; 
try{ 
    instanceId = ModulesServiceFactory.getModulesService().getCurrentInstanceId(); 
} catch (ModulesException e){ 
    instanceId = e.getMessage(); 
} 

沒有嘗試捕捉,你會在本地運行時得到一些嚴重錯誤。

我一直在使用端點與發佈 - 訂閱和其他位混合時,試圖確定爲什麼有些事情不同的方式工作,以確定其是否涉及到新實例發現這個調試超級有用。

相關問題