2014-10-03 22 views
0

Я использую GAE push Task Queue. Я хочу, чтобы задача выполнялась один раз, и если она не работает, я хочу, чтобы она как-то уведомила меня. Я также не хочу, чтобы он делал какие-либо попытки. Если это не удается, я хочу, чтобы он сидел в очереди, пока я не перезапустил его вручную.Как получить уведомление об ошибке очереди задач Google App Engine

Я могу вручную поймать все исключения и отправить электронное письмо самому себе, это не удается. Есть ли способ лучше? В конфигурации очереди я могу указать ограничение на повторение (см. Ниже), но если я это сделаю, задача будет удалена, как только она завершится с ошибкой.

# queue.yaml 
- name: default 
    rate: 5/s 
    retry_parameters: 
    task_retry_limit: 0 

Любые идеи?

ответ

3

Единственный способ, который я могу придумать для этого, - установить высокое значение для min_backoff_seconds. Если вы можете установить это для чего-то высокого, как 7 дней, то это должно дать вам достаточно времени для принятия мер в ответ на ваше сообщение электронной почты.

Я не знаю, есть ли предел того, насколько высока величина, которую вы можете установить для min_backoff_seconds, поэтому вы захотите ее проверить.

Я думаю, что исключение для исключения и отправка электронной почты - единственный способ оповестить себя о сбое задачи.

0

Я не думаю о том, чтобы сделать то, что вы хотите, кроме того, чтобы захватить все исключения. GAE не отправляет сообщение, когда задача не работает, нет службы, чтобы «позволить» получить эту функциональность, к сожалению.

Если вы не получаете инженер Google, чтобы ответить что-то о службе я не в курсе ....

5

Когда задача повторы, вы можете прочитать количество повторов в следующей попытке. И делайте то, что вам нужно.

Посмотрите here для: X-AppEngine-TaskRetryCount, количество повторений этой задачи; для первой попытки это значение равно 0. Это число включает в себя попытки, когда задача завершилась неудачей из-за отсутствия доступных экземпляров и никогда не достигла фазы выполнения.

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) 
Смежные вопросы