GAE任务队列在java中的处理时间

时间:2012-09-28 10:13:29

标签: java google-app-engine servlets task-queue

在我的jsp Web应用程序中,当我处理报告时,它总是会导致DeadlineExceededException。所以我将流程移动到app引擎的任务队列中。 但是使用任务队列,它不会生成报告,也不会显示任何ejan消息。任务队列是DeadlineExceededException的正确解决方案,还是任务队列的处理时间限制为1分钟。

我的queue.xml配置如下

<?xml version="1.0" encoding="UTF-8"?>
<queue-entries>
    <queue>
        <name>default</name>
        <rate>5/s</rate>
    </queue>
    <queue>
        <name>subscription-queue</name>
        <rate>5/s</rate>
    </queue>
    <queue>
        <name>excel-generator-queue</name>
        <rate>5/s</rate>
    </queue>
</queue-entries>

2 个答案:

答案 0 :(得分:1)

任务队列超时限制远远超过1分钟。 (至少应该是10分钟;你必须阅读GAE文档才能找到答案)。

另外,检查您是否使用推或拉队列,以及您是否对您的选择感到满意。我认为你的配置可能是推送的默认队列类型。

您是否已将任何日志记录代码放入排队任务调用的代码中?这将允许您查明代码是否正在执行。

答案 1 :(得分:1)

需要考虑两个截止日期 - 您所制作的各个App Engine API调用的截止日期以及任务处理的总截止日期。

当您调用App Engine API时,有时呼叫将在大约5秒内完成,您将收到DeadlineExceededException。您可以选择再次拨打电话。 Url Fetch和Lease Tasks等一些API允许您指定截止日期。如果您发现异常,您将看到哪些代码超时。

使用任务队列时,任务处理的总截止日期为10分钟,除非您使用的是后端 - https://developers.google.com/appengine/docs/python/backends/ (当不使用任务队列时,整个截止日期仅为60秒。)

问题提到“它不会生成报告”。执行任务时,没有Web浏览器可以查看进度报告或最终报告。添加一些日志记录到您的报告生成。将生成的报告存储在数据存储中,或通过电子邮件发送。