2013-03-25 4 views
0

Я выполняю некоторые операции, которые должны завершиться до 60 секунд, но могут быть некоторые редкие случаи, когда требуется больше времени (но это не займет больше 10 минут). Он говорит в документах движка приложения, если вы поймаете DeadlineExceededException, у вас есть меньше секунды, чтобы выполнять операции до того, как он навсегда завершится. Будет ли это достаточно времени для добавления задачи в очередь и/или записи хранилища данных? Я полагаю, что самым безопасным способом было бы добавить задачу async/write объект хранилища данных (async) в начале операции и удалить его из очереди, если операция завершена. Последний метод будет использовать в два раза больше вызовов api, но стоит ли это?DeadlineExceededException и DataStore/Операции очереди задач

ответ

2

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

+0

Моя забота о постоянном опросе сервера, чтобы проверить, завершена ли очередь. То, что я делаю, заключается в том, что клиент попал на сервер, он сначала проверит хранилище данных, чтобы проверить, существует ли кешированная версия операции, если она существует. Если нет, я буду генерировать ответ динамически, кешировать его в хранилище данных и возвращать его. Большинство из этих ответов могут генерировать менее 60 секунд, но возможно, что некоторые из них могут занять больше времени. Я надеялся, что смогу ограничить количество опросов серверов, только в случае необходимости запрограммировать их. Какова временная гарантия очереди? Как часто я буду опробовать? – cowmix

1

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

1

Если вы не хотите, чтобы клиент продолжал опрос для результата очереди задач, я предлагаю вам взглянуть на API канала. Это позволит вам реализовать push-уведомления клиенту.

В конце вашей очереди задач вам просто нужно отправить уведомление клиенту, чтобы он теперь выполнил задачу, которая была обработана.

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