App Engine实例ID

时间:2013-02-27 07:20:46

标签: google-app-engine

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

4 个答案:

答案 0 :(得分: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();

请注意,此方法完全没有由Google记录,并且可能会在未经警告的情况下发生变化。但由于您的用例仅用于日志记录,我认为现在就足够了。

答案 1 :(得分:1)

随着Modules的出现,您可以在a more elegant way中获取当前实例ID:

ModulesServiceFactory.getModulesService().getCurrentInstanceId()

答案 2 :(得分: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和其他位混合的端点进行调试非常有用,可以尝试确定某些事情的工作方式不同并确定它是否与新实例相关。

答案 3 :(得分:0)

之前不确定,但在 2021 年的今天,系统环境变量 user.js:54 Uncaught (in promise) SyntaxError: Unexpected end of input at UserComponent.user (user.js:54)" 似乎包含实例 ID:

GAE_INSTANCE