3

是否可以获得有关您正在运行的实例的信息?我只想输出一个简单的标识符,用于记录当前正在运行代码的实例。

4

4 回答 4

3

由于没有语言标签,并且查看您的个人资料历史记录,我假设您使用的是 GAE/J?

在这种情况下,实例 ID 信息嵌入在您可以通过ApiProxy.getCurrentEnvironment()方法获取的环境属性之一中。然后,您可以使用 key 从结果映射中提取实例 ID BackendService.INSTANCE_ID_ENV_ATTRIBUTE

即使密钥存储在 BackendService 中,这种方法也适用于前端实例。总而言之,以下代码将为您获取实例 ID:

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

请记住,这种方法并未被 Google 记录在案,并且将来可能会在没有警告的情况下进行更改。但是由于您的用例仅用于日志记录,我认为现在就足够了。

于 2013-02-27T11:48:14.670 回答
1

随着Modules的出现,您可以以更优雅的方式获取当前实例 id :

ModulesServiceFactory.getModulesService().getCurrentInstanceId()

于 2014-04-16T21:47:10.860 回答
1

更好的是,您应该将调用包装在 try catch 中,以便它也可以在本地正常工作。

导入这个

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();
}

如果没有 try catch,在本地运行时会出现一些令人讨厌的错误。

我发现当使用与 pub-sub 和其他位混合的端点来尝试确定某些事情为何不同地工作并确定它是否与新实例相关时,这对于调试非常有用。

于 2017-01-05T20:44:29.567 回答
0

以前不确定,但在 2021 年的今天,系统环境变量GAE_INSTANCE似乎包含实例 ID:

instanceId = System.getenv("GAE_INSTANCE")
于 2021-04-21T04:23:26.203 回答