App Engine: правильный способ запустить долгосрочную задачу в Backend из внешнего интерфейса? - PullRequest
4 голосов
/ 23 января 2012

Я бы хотел запустить долгосрочную задачу на экземпляре Backend.Эта внутренняя задача будет запущена внешним кодом (сервлетом) через HTTP-запрос.Все это описано в документации, и это работает для меня.

Что меня беспокоит, так это то, что внешние экземпляры имеют ограничение продолжительности запроса в 30 с (или сейчас это 60 с?).Во время этого запроса клиентская часть будет вызывать серверную часть, чтобы запустить долгосрочную задачу.Тем не менее, поскольку эта задача выполняется долго, и передний конец ожидает ее завершения и истечет время ожидания.

Вопрос состоит в том, как сделать HTTP-запрос от внешнего интерфейса, чтобы запустить долгосрочную задачу бэкэнда, чтобы внешний интерфейс не получил тайм-аут и бэкэнд продолжал работать?

ЧтоЯ уже пробовал это:

  1. Запустить отдельный поток в бэкэнде.Моя IDE (идея) жалуется на это, говоря, что Thread не разрешены в App Engine.Разрешены ли они в серверных экземплярах?
  2. В сервлете внутреннего интерфейса очистите ответ и закройте Writer () - ничего не происходит.Внешний интерфейс ничего не получает.

Я пробовал все это на сервере dev.Стоит ли пробовать на производстве?

1 Ответ

12 голосов
/ 23 января 2012

Способ выполнения долгосрочных запросов в AppEngine, во внешнем или внутреннем интерфейсе, заключается в использовании очередей задач . Задания имеют 10-минутный тайм-аут, а не 60 секунд, но если вам нужно еще больше времени, вы можете запустить его на серверном экземпляре, присвоив ему целевое имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...