我在前端启动了一个带有angularJs的应用程序,在后端启动了谷歌应用程序引擎java用于休息服务。 一切正常,但我的应用只有我的流量。因此,每次我都不发送请求一段时间,我的应用程序可能需要超过30秒来回答我...
我不是唯一一个在gae上使用java app遇到此问题的人。 我在互联网上找到了两个解决方案:
所以我用这个定制web.xml:
<servlet-mapping>
<url-pattern>/_ah/start</url-pattern>
<servlet-name>startup</servlet-name>
</servlet-mapping>
<servlet>
<servlet-name>startup</servlet-name>
<servlet-class>fr.gae.todo.api.servlet.StartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
和appengine-web.xml与此:
<warmup-requests-enabled>true</warmup-requests-enabled>
但我的StartupServlet从未记录任何内容......有人知道为什么吗?
或带有加载请求的解决方案?因为我可以在日志中看到它们
答案 0 :(得分:0)
是的,我能理解这种困惑......
在App Engine中,预热请求不是您认为的直观。如果没有可用的实例,它不会对实例进行warm_up,然后发送请求。它实际上做的是在所有实例被占用时预测峰值流量;然后,如果有更多请求进入,它会预热一些实例。
请记住,实例加载时间不能神奇地缩短,因此当您没有活动实例时,第一个请求将花费X时间来提供服务,不管是否正在预热。
如果您需要30秒加载,您可以告诉实例“预热”30秒然后发送立即处理的请求(总共30秒)或者您只需发送请求并加载实例( loading_request)并需要30秒来处理您的请求(总共30秒)。你明白我的意思吗?这就是为什么当你的实例都没有启动时没有实现预热请求的原因,这是毫无意义的。
有关详细信息,请阅读本文 - https://cloud.google.com/appengine/docs/adminconsole/instances#Warmup_Requests
=== --- ===
解决方案正如您所提到的那样......始终将实例保持活动并保持空闲状态,这将起作用。
答案 1 :(得分:0)