如何获取应用引擎前端服务器的实例ID?

时间:2012-07-31 00:57:16

标签: google-app-engine

有没有办法直接向该服务器发送请求?

5 个答案:

答案 0 :(得分:7)

实际上有一种方法可以将新数据推送到应用程序的所有实例。

from google.appengine.api import modules
instance_id = modules.get_current_instance_id()

ref: GAE Modules Docs

答案 1 :(得分:1)

出于什么目的?

如果您要测试不同的版本,可以使用流量分割https://developers.google.com/appengine/docs/adminconsole/trafficsplitting

但这是不同的版本,而不是特定的实例。

答案 2 :(得分:1)

没有。

通常当有人问起这样的事情时,他们会在app引擎上走向错误的方向。前端服务器始终启动和关闭。如果您正在设计依赖于特定实例的任何内容,那么您做错了。无论他们遇到什么样的实例,您都需要设计有效的请求。

如果必须这样做,请考虑使用后端。

答案 3 :(得分:0)

我使用Python和日期时间戳来标识实例。此实例标识由appengine_config.py设置。为了通知其他实例,我在memcache中使用了一个标志,该标志由我的webapp2请求处理程序的__init__检查。 我使用信号到其他实例来刷新jinja环境并重新加载动态python代码,因为我找不到另一种方法。

这是一个memcache标志的例子;信令重新加载所有动态模块,这些模块已由实例ID设置:'2012-12-26 16:39:50.072000'

{ u'_all': { u'dyn_reloads_dt': datetime.datetime(2012, 12, 26, 16, 39, 59, 120000),
             u'setter_instance': '2012-12-26 16:39:50.072000'}} 

我主演了feature request:Ibrahim Arief

答案 4 :(得分:0)

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

ModulesServiceFactory.getModulesService().getCurrentInstanceId()

此外,根据this doc,您可以使用类似

的URL将请求专门路由到特定实例

http://instance.version.module.app-id.appspot.com

请注意,您需要使用-dot-替换该点以取消您的网络客户端可能抱怨的SSL证书警告:

http://instance-dot-version-dot-module-dot-app-id.appspot.com