【问题标题】:How to get notified of Google App Engine Task Queue failure如何获得有关 Google App Engine 任务队列失败的通知
【发布时间】:2014-10-03 15:27:24
【问题描述】:
我正在使用GAE push Task Queue。我希望任务运行一次,如果它失败了,我希望它以某种方式通知我。我也不希望它重试。如果它失败了,我希望它留在队列中,直到我手动重新运行它。
我可以手动捕获所有异常并在失败时向自己发送一封电子邮件。有没有更好的办法?
在队列配置中,我可以将重试限制(见下文)指定为零,但如果我这样做,任务一旦失败就会被删除。
# queue.yaml
- name: default
rate: 5/s
retry_parameters:
task_retry_limit: 0
有什么想法吗?
【问题讨论】:
标签:
python
google-app-engine
task-queue
【解决方案1】:
当任务重试时,您可以在下次重试时读取重试计数。并做你需要做的。
查看here 为:X-AppEngine-TaskRetryCount,此任务已重试的次数;对于第一次尝试,此值为 0。此数字包括由于缺少可用实例而导致任务失败且从未到达执行阶段的尝试。
【解决方案2】:
我能想到的唯一方法是为 min_backoff_seconds 设置一个较高的值。如果您可以将其设置为 7 天之类的较长时间,那么您应该有足够的时间来采取行动来回复您的电子邮件。
我不知道您可以为 min_backoff_seconds 设置多高的值是否有限制,因此您需要检查一下。
我认为捕获异常并向自己发送电子邮件是通知自己任务失败的唯一方法。
【解决方案3】:
除了抓住所有异常之外,我想不出任何方法来做你想做的事。当任务队列失败时,GAE 不会发送消息,遗憾的是没有服务“允许”获得该功能。
除非您让 Google 工程师回答有关我不知道的服务的问题......
【解决方案4】:
@voscausa 的回答意味着:您可以实现一个taskCheckerTask,它始终返回除 200-299 之间的任何数字的 http 代码。但是别忘了任务会从队列中删除如果失败了。
class TaskChecker(webapp2.RequestHandler):
def post(self):
# Check tasks and retries here
# If need send mail
self.echo(500)