我的Apache Wicket Web应用程序使用JDO在GAE / J中实现数据持久性。
在应用程序启动时,主页会在显示任务之前将任务排入队列(对其默认ETA没有延迟)。此任务导致构建新的Wicket Web页面,以构建JVM的单例Persistence Manager Factory(PMF)实例,供应用程序在其生命周期内使用。
我已将应用程序设置为通过添加
来使用并发请求<threadsafe>true</threadsafe>
到应用程序的appengine-web.xml文件。
尽管如此,在访问应用程序主页的单个请求之后,我得到两个应用程序实例:一个由主页访问请求创建,另一个由执行排队任务创建(大约6到7秒后) )。
我可以尝试通过延迟排队任务的执行来解决这个问题(大约10秒左右,也许?),但是为什么我在启用并发请求时需要尝试这个?第一个GAE / J应用程序实例是否应该能够在不引起第二个实例的情况下一起处理两个请求?我认为我做错了什么,但它是什么?
我搜索了Stack Overflow的标签集([google-app-engine] [java])和折旧组“Google App Engine for Java”,但没有找到与我的问题相关的内容。
我很感激任何指示。
答案 0 :(得分:1)
如果您希望任务使用现有实例,可以根据GAE文档设置X-AppEngine-FailFast
标题:
如果现有实例不可用,则此标头指示调度程序立即使请求失败。任务队列将重试并退回,直到现有实例可用于为请求提供服务
值得查看Managing Your App's Resource Usage文档的性能和调优技巧。