为什么队列中的GAE任务比指定的更频繁地运行?

时间:2017-09-01 12:57:45

标签: google-app-engine google-cloud-datastore task-queue

我的队列定义如下:

....
<queue>
    <name>sendMailsBatch</name>
    <rate>1/m</rate>
    <max-concurrent-requests>1</max-concurrent-requests>
    <retry-parameters>
        <min-backoff-seconds>70</min-backoff-seconds>
        <max-doublings>1</max-doublings>
    </retry-parameters>
</queue>
....

我希望每次任务运行之间至少有60秒的时间间隔。无论是因为失败都是同一个任务,还是运行不同的任务,都必须如此。

该过程从一个任务放入队列开始,此任务将在最后 - 如果所有数据存储操作都成功 - 将另一个任务添加到队列中(因为它使用来自任务执行的数据存储区操作的游标) )。

当我查看日志时,任务执行得太频繁了: enter image description here

为什么这些任务经常执行,当我配置一次最多可以运行一个任务,每分钟最多一个任务,并且如果任务失败,运行之间应该至少有70秒?

谢谢, -Louise

1 个答案:

答案 0 :(得分:2)

处理队列时,应用引擎会使用指定的所有并发请求来处理其存储桶中已有的内容。完成这些任务后,在新任务出现在存储桶上之前,它不会执行任何其他工作。将这些任务添加到存储桶的速率由<rate>定义。

在您的情况下,您正确设置了<rate>,但由于您没有明确设置<bucket-size>参数,因此默认为5,如此处所述:https://cloud.google.com/appengine/docs/standard/java/config/queueref。明确将<bucket-size>设置为1后,您就不应再遇到此问题。