【问题标题】:Google appengine creates deferred queue(/_ah/queue/__deferred__) for all request in multitenancy applicationGoogle appengine 为多租户应用程序中的所有请求创建延迟队列(/_ah/queue/__deferred__)
【发布时间】:2014-06-24 13:42:08
【问题描述】:

Appengine 为多租户应用程序站点上的每个命中或每个请求创建延迟队列(/_ah/queue/deferred),因此创建和运行大量队列,导致错误结果以及过度使用导致超出配额的队列。

此应用程序在作为多租户应用程序的一部分的数据存储操作之前设置命名空间,即NamespaceManger.set(somenamespace)。没有完成与队列相关的编码,默认队列由 appengine 自动创建,每次操作都会生成多个导致问题的队列。

提前致谢。感谢任何帮助。

在我当前的应用程序中,我们使用 GAE Cloud Endpoint 连接到 android 和 web 模块。在这个应用程序中,我们根据命名空间(多租户)应用程序分离了数据存储和内存缓存。我发现的观察结果是,对于 android 或 web 模块的每次调用,日志文件中都有一个延迟队列条目。这导致我的后端实例小时数被消耗。我不明白的是,由于我没有使用 Taskqueue 或没有为相同的方式/谁触发延迟队列进行配置,以及解决此问题的可能方法是什么

【问题讨论】:

  • 没有足够的信息来回答。发布您的 app.yaml 以及其中包含 deferred 的任何代码。
  • @GAEfan @GAEfan :我没有使用任务队列,并且在我的代码中没有相同的条目,所以没有延迟代码。至于 app.yaml <application><APPID></application><version>1</version> <threadsafe>true</threadsafe> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> /system-properties> <sessions-enabled>true</sessions-enabled> <async-session-persistence enabled="true"/> <sessions-enabled>true</sessions-enabled> <async-session-persistence enabled="true"/>
  • @GAEfan 在我当前的应用程序中,我们使用 GAE Cloud Endpoint 连接到 android 和 web 模块。在这个应用程序中,我们根据命名空间(多租户)应用程序分离了数据存储和内存缓存。我发现的观察结果是,对于 android 或 web 模块的每次调用,日志文件中都有一个延迟队列条目。这导致我的后端实例小时数被消耗。我无法理解的是,由于我没有使用 Taskqueue 或没有为触发延迟队列的相同方式/谁进行任何配置,因此也是解决方案

标签: java google-app-engine google-cloud-endpoints task-queue multi-tenant


【解决方案1】:

问题是由于在您的 app.yaml 中启用了 async-session-persistence。

启用此功能后,您的应用程序会将您的 HTTP 会话日期写入您的数据存储区。该过程是使用延迟任务队列完成的。当此任务队列失败时,系统会不断重试。

因此,要解决此问题,您可以从 app.yaml 中删除此代码

<async-session-persistence enabled="true"/>

或者 您必须调试错误以避免任务队列失败。

希望这会有所帮助。一切顺利。

【讨论】:

  • 很有趣,希望这就是在我的应用程序中造成问题的原因。我已将其设置为 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2018-06-17
  • 2012-05-22
相关资源
最近更新 更多