Как использовать модули в Google App Engine и добавить к ним цель с помощью очереди задач (Java)?

У меня есть задача, срок выполнения которой превышает 10 минут. Просматривая различные документы, я обнаружил, что используя модули, я могу запустить экземпляр, который будет обрабатывать долгосрочную задачу, но предпочтительно даже это должно быть сделано с использованием очереди задач. Я использовал бэкэнды, но они устарели.

У меня вопрос: как я могу ввести модули в существующий проект App Engine и как их использовать для выполнения долгосрочных задач?

Ниже приведен фрагмент кода:

Queue queue = QueueFactory.getQueue("myqueue");
TaskOptions task = TaskOptions.Builder.withUrl("/submitworker").method(Method.POST);
queue.add(task);

Какие изменения я должен сделать в приведенном выше коде, чтобы добавить долгосрочную задачу с помощью модуля? ["Submitworker" - это сервлет, который является актуальной долгосрочной задачей]

Я ссылался на эту ссылку, но не могу обойтись третьим шагом:
3. Добавьте элементы объявления службы в файл appengine-application.xml.

Кроме того, даже если я успешно добавлю модуль в свой проект, как я могу нацелить этот модуль с помощью очереди задач?

Я прошел через этот вопрос, но это реализация на python, моя реализация на Java.

Я ищу пошаговый процесс о том, как использовать "Target" в модулях и как использовать его при добавлении в очередь задач.

Даже если я добавлю долгосрочную цель модуля в очередь задач, все равно будет ли она прервана через 10 минут или она завершит задачу, даже если срок задачи в очереди задач истек?

Пожалуйста, предложите.

2 ответа

Решение

Модули и сервисы - это одно и то же, они похожи на старые бэкэнды (которые все еще работают, но не рекомендуются).

Есть два основных способа заставить модули работать:

  • Создайте EAR и разверните его
  • Развертывайте сервисы независимо как файлы WAR (что, вероятно, вы делаете сейчас с модулем по умолчанию)

Второй вариант, вероятно, проще, потому что это всего лишь вопрос изменения вашего application-web.xml. У вас может быть репо или ветка на модуль, или просто процесс сборки, который изменяет модуль, на который вы ориентируетесь.

Прямо сейчас ваше application-web.xml, вероятно, имеет что-то вроде этого:

<application>@appId@</application>
<version>@appVersion@</version>    
<module>default</module>   

изменить это на что-то вроде этого

<application>@appId@</application>
<version>@appVersion@</version>    
<module>long-running-service</module>
<instance-class>B1</instance-class>
<manual-scaling>
    <instances>1</instances>
</manual-scaling>

Вы настраиваете саму очередь, чтобы предназначаться для определенного модуля в queue.xml Смотрите здесь.

Отказ от ответственности: ответ основан исключительно на документации (на самом деле я использую Python - те же понятия, но разные конфигурации).

Чтобы сервис / модуль позволял выполнять длительные задачи, вы должны настроить его для базового или ручного масштабирования. Из типов масштабирования и классов экземпляров (Deadline строка в таблице):

  • в Manual scaling колонка:

Запросы могут выполняться бесконечно. Масштабируемый вручную экземпляр может обрабатывать /_ah/ запускать и выполнять программу или сценарий в течение многих часов без возврата кода ответа HTTP. Задачи могут работать до 24 часов.

  • в Basic scaling колонка:

То же, что и ручное масштабирование.

Конфигурации масштабирования модуля, выполняемые через соответствующие модули appengine-web.xml файл, описанный в элементах Scaling:

  • <manual-scaling>:

Необязательный. Элемент включает масштабирование вручную для модуля и устанавливает количество экземпляров для модуля.

  • <basic-scaling>:

Необязательный. Элемент устанавливает количество экземпляров для модуля.

Что касается фактического преобразования в модули, дополните руководство, на которое вы указали, файлами конфигурации (включая пример) и appengine-web.xml Синтаксис (см. module а также service конфиги).

Около appengine-application.xmlиз файлов конфигурации:

Каталог META-INF содержит два файла конфигурации: appengine-application.xml а также application.xml, appengine-application.xml файл содержит общую информацию, используемую инструментами App Engine при развертывании вашего приложения...

...

Обратите внимание, что в то время как каждый appengine-web.xml файл должен содержать <application> тег, имя, которое вы указываете там, игнорируется. Название заявки взято из <application> тег в appengine-application.xml файл.

Чтобы направить определенную очередь в определенный сервис / модуль, вы используете queue.xml файл. Из синтаксиса:

  • <target> (push очереди):

Необязательный. Строка с именем модуля / версии, версии внешнего интерфейса или серверной части, для которой выполняются все задачи, поставленные в очередь в этой очереди.

Строка добавляется к имени домена вашего приложения при создании HTTP-запроса для задачи. Например, если ваш идентификатор приложения - my-app, а вы установили целевой объект my-version.my-service, в качестве имени хоста URL будет указано my-version.my-service.my-app.appspot.com.

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

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

Другие вопросы по тегам