我的队列定义如下:
....
<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秒的时间间隔。无论是因为失败都是同一个任务,还是运行不同的任务,都必须如此。
该过程从一个任务放入队列开始,此任务将在最后 - 如果所有数据存储操作都成功 - 将另一个任务添加到队列中(因为它使用来自任务执行的数据存储区操作的游标) )。
为什么这些任务经常执行,当我配置一次最多可以运行一个任务,每分钟最多一个任务,并且如果任务失败,运行之间应该至少有70秒?
谢谢, -Louise
答案 0 :(得分:2)
处理队列时,应用引擎会使用指定的所有并发请求来处理其存储桶中已有的内容。完成这些任务后,在新任务出现在存储桶上之前,它不会执行任何其他工作。将这些任务添加到存储桶的速率由<rate>
定义。
在您的情况下,您正确设置了<rate>
,但由于您没有明确设置<bucket-size>
参数,因此默认为5,如此处所述:https://cloud.google.com/appengine/docs/standard/java/config/queueref。明确将<bucket-size>
设置为1后,您就不应再遇到此问题。