Проверьте параметры повтора очереди задач Google Cloud из задачи

#google-cloud-platform #google-cloud-tasks

#google-облачная платформа #google-cloud-tasks

Вопрос:

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

Однако мы хотим, чтобы задача возвращалась к решению по умолчанию, если задача завершается неудачно в последний раз.

То есть, если задача завершается неудачно с первого раза, мы просто регистрируем ошибку и возвращаемся 500 . И снова во второй раз. И третий. И т.д… но если текущая TaskRetryCount попытка является последней попыткой для этой очереди (т. Е. 4 В этом примере), Тогда мы выполним некоторое резервное поведение перед возвратом 500 в последний раз.

Я вижу из документов HTTP-обработчика Cloud Tasks, которые я могу получить X-CloudTasks-TaskRetryCount из заголовка запроса. Но, похоже, у него нет способа получить max-attempts для очереди.

Это то, что я могу получить?

Или я неправильно подхожу к этому? Есть ли лучший способ сделать то, что я пытаюсь сделать.

Комментарии:

1. Почему вы используете Cloud Task, а не PubSub, например? Вам нужна какая-то конкретная функция облачной задачи?

Ответ №1:

Предполагая, что задачи создаются с помощью облачных задач, параметры повторных попыток на уровне очереди применяются ко всем задачам в очереди, которые были созданы с использованием облачных задач (поскольку их нельзя установить для отдельных задач). Вызов projects.locations.метод queues.get из REST API должен возвращать параметры RetryConfig из очереди, которые включают maxAttempts требуемое поле.


Для задач, созданных с помощью App Engine SDK, вам следует обратиться к this docs (хотя я считаю, что этот подход устарел и бесполезен для вашего варианта использования).

Ответ №2:

Вы можете получить значение максимального количества попыток очереди с помощью вызова getQueue и проверки очереди.retryConfig.maxAttempts и используйте заголовок X-CloudTasks-TaskRetryCount для проверки текущей попытки, если maxAttempt != -1 amp;amp; maxAttempt == (повторная попытка 1) ваша последняя попытка.

Обратите внимание, что X-CloudTasks-TaskRetryCount учитываются только задачи, которые возвращают код состояния 5xx, а также задачи, которые не попали в фазу выполнения (в ваш код). Если вы хотите подсчитать только неудачные попытки, произошедшие на этапе завершения, вам следует использовать заголовок X-CloudTasks-TaskExecutionCount и убедиться, что ваш код возвращает код состояния 4xx в случае ошибки. Согласно документам:

X-CloudTasks-Taskexecutionсчитайте общее количество раз, когда задача получала ответ от обработчика. Поскольку Cloud Tasks удаляет задачу после получения успешного ответа, все предыдущие ответы обработчика были ошибочными. Это число не включает сбои из-за кодов ошибок 5XX.

Комментарии:

1. Обратите внимание, что X-CloudTasks-TaskExecutionCount это тот, который вы должны использовать вместо этого. Тот, который вы упомянули, не будет считаться повторной попыткой для максимальных попыток, поскольку он включает в себя те, которые не попали на этап выполнения cloud.google.com/tasks/docs/creating-http-target-tasks#handler

2. Это не сработает, если мой обработчик вернет статус 500, чтобы указать неудачную задачу. Как насчет задач, которые попали в фазу выполнения и возвращают статус 500?

3. Хммм, да, хорошая мысль, вы правы. Я годами использовал задачи в AppEngine, и облачные задачи должны были быть одинаковыми, но, похоже, в этом они отличаются. Спасибо, что указали на это. cloud.google.com/tasks/docs /…

4. Да, в App Engine это другое.. Это все еще проблема, потому что, если вы используете X-CloudTasks-TaskRetryCount , как я предложил, вы можете считать повторные попытки, которые вы не хотите учитывать (т. Е. Произошла какая-либо ошибка до запуска вашего события code) Я думаю, Google ожидает, что вы будете использовать код состояния 4xx для любой ошибки вашего обработчика