2014-01-09 1 views
1

У меня есть сервлет Google App Engine, который cron настроен на запуск один раз в неделю. Так как это займет более 1 минуты времени выполнения, он запускает задачу (то есть другой сервлет task/clear) в очереди задач по умолчанию для приложения.Как Google App Engine можно предотвратить немедленную перестройку задач после кода состояния 500?

Теперь я наблюдаю следующее: если задача вызывает исключение (например, NullPointerException внутри своего второго сервлета), это преобразуется в статус HTTP 500 (то есть HttpURLConnection.HTTP_INTERNAL_ERROR), и Google App Engine, по-видимому, реагирует, немедленно перезапустив тот же снова. Он объявляет это путем печати:

Web hook at http://127.0.0.1:8888/task/clear returned status code 500. Rescheduling.. 

Я могу видеть, как это иногда может быть feature, но в моем случае это неуместно. Могу ли я попросить, чтобы Google App Engine не выполнял такую ​​автоматическую перепланировку, или я ожидаю, что буду использовать другие коды состояния, чтобы указать условия ошибки, которые не могли бы привести к перепланированию по его правилам? Или это то, что происходит только на dev. сервер?

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

ответ

1

По https://developers.google.com/appengine/docs/java/taskqueue/overview-push#Java_Task_execution - задача должна возвращать код ответа от 200 и 299.

Вы можете либо вернуть правильное значение, установите taskRetryLimit в RetryOptions или проверить заголовок X-AppEngine-TaskExecutionCount, когда запуск задачи в проверить, сколько раз оно было запущено и действовать соответствующим образом.

+0

+1 «X-AppEngine-TaskExecutionCount» позволит мне выполнить дополнительную проверку безопасности внутри сервлета. – Drux

Смежные вопросы