2015-01-23 3 views
-1

Я импортирую контакты из файла CSV и используя службу blobstore механизма Google для сохранения блоба, и я отправляю blobkey в качестве параметра в URL очереди задач. Чтобы URL-адрес очереди задач мог использовать ключ blob для анализа CSV-файла и сохранения его в хранилище данных.Почему очередь задач по умолчанию для Google App Engine запускается бесконечно?

Это мой код Java для создания очереди задач.

Queue queue = QueueFactory.getDefaultQueue();

queue.add (TaskOptions.Builder.withUrl ("/ queuetoimport"). Param ("contactsToImport", contactsDetail));

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

В чем может быть причина.

+3

Какой код статуса HTTP является возвращаемым вашим обработчиком задач? Если это код состояния вне диапазона 200..299, задача будет повторена, за https://cloud.google.com/appengine/docs/python/taskqueue/overview-push#task_deadlines –

+0

Спасибо за информацию. Проблема решена. Именно из-за возврата каретки я не заметил в конце файла CSV, заставив обработчик задачи выдать исключение, приводящее к повторным попыткам. –

ответ

2

Это делается для восстановления ошибок. Предположим, например, что ваша задача собирала фид JSON из сети, анализировала его и сохраняла в базе данных ... в случае сбоя сетевого подключения, времени ожидания и т. Д. Или возвращаемого фида чтобы быть плохим временно и не удалось проанализировать или любое другое количество прерывистых, вероятностных источников отказа, это автоматическое повторное поведение (с экспоненциальным отступлением) обеспечило бы успешное завершение задачи (предполагая, что отказ является тем, который может быть исправлен повторная попытка, а не ошибка программиста, которая гарантировала бы сбой каждый раз). Код состояния HTTP задачи используется для определения того, как завершена задача (успешно или безуспешно), чтобы определить, нужно ли ее повторять. Если вы не хотите, чтобы задача была повторена, убедитесь, что она завершена успешно (и позволяет App Engine знать об этом, используя код состояния успеха, который представляет собой любой из кодов уровня 2xx).

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

+0

Спасибо за информацию. Проблема решена. Именно из-за возврата каретки я не заметил в конце файла CSV, заставив обработчик задачи выдать исключение, приводящее к повторным попыткам. –

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