我正在使用GAE push Task Queue。我希望任务运行一次,如果失败,我希望它以某种方式通知我。我也不想让它做任何重试。如果它失败了,我希望它在队列中,直到我手动重新运行它。
我可以手动捕获所有异常并向自己发送电子邮件,但它失败了。有没有更好的办法? 在队列配置中,我可以指定零的重试限制(见下文),但如果我这样做,任务一旦失败就会被删除。
# queue.yaml
- name: default
rate: 5/s
retry_parameters:
task_retry_limit: 0
有什么想法吗?
答案 0 :(得分:5)
当任务重试时,您可以在下次重试时读取重试次数。并做你需要做的事。
查看here:X-AppEngine-TaskRetryCount,此任务已被重试的次数;对于第一次尝试,此值为0.此数字包括由于缺少可用实例而导致任务失败并且从未到达执行阶段的尝试。
答案 1 :(得分:3)
我能想到的唯一方法就是为min_backoff_seconds设置一个高值。如果你可以设置7天以内的高价,那么这应该给你足够的时间来回应你的电子邮件。
我不知道你可以为min_backoff_seconds设置的值有多高,所以你要检查它。
我认为捕获异常并向自己发送电子邮件是通知自己任务失败的唯一方法。
答案 2 :(得分:0)
除了抓住所有异常之外,我没有想到任何可以做你想做的事情。当任务队列失败时,GAE不会发送消息,没有服务来"允许"不幸的是,获得了这项功能。
除非你让谷歌工程师回答一些我不知道的服务......
答案 3 :(得分:0)
@ voscausa的回答意味着:你可以实现一个taskCheckerTask
,它始终返回任何数字的http代码,但200-299之间除外。但如果失败,请不要忘记任务将从队列中删除。
class TaskChecker(webapp2.RequestHandler):
def post(self):
# Check tasks and retries here
# If need send mail
self.echo(500)