Запускать серверные части с помощью Cron в Google App Engine (Java)

У меня есть настройка динамического бэкэнда на GAE, которую я хочу запускать с помощью cron каждые 15 минут. Проблема в том, что cron требует URL, который начинается с "/". В то время как внутренний URL использует следующий формат: http://backendname.yourapp.appspot.com.

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

Согласно документации Google: http://code.google.com/appengine/docs/java/backends/overview.html#Public_and_Private_Backends

«Доступ к частным серверным модулям может осуществляться администраторами приложений, экземплярами приложения, а также API-интерфейсами и службами App Engine (такими как задачи очереди задач и задания Cron) без какой-либо специальной настройки».

Кто-нибудь вызвал бэкенд, объявив его в cron.xml?


person Jay Q.    schedule 11.07.2011    source источник
comment
Интересный вопрос! Кстати, поскольку вы можете настроить app.yaml так, чтобы разрешить администратору доступ только к URL-адресу, fetchurl не сделает ваш бэкэнд общедоступным.   -  person lucemia    schedule 11.07.2011
comment
@lucemia Я использую backends.xml. Стараемся держаться подальше от ямла как можно дольше. Кроме того, я думаю, что fethurl может вызывать только общедоступные URL-адреса.   -  person Jay Q.    schedule 12.07.2011


Ответы (3)


Используйте целевой тег, чтобы указать серверную часть в вашем cron.xml.

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/long-task</url>
    <description></description>
    <schedule>every 30 minutes</schedule>
    <target>name-of-the-backend</target>
  </cron>
</cronentries>
person lyxera    schedule 27.09.2011
comment
У меня тоже работает. Документы предполагают, что целевой элемент указывает версию вашего приложения, но работает с именем серверной части. @Jay Q .: Пожалуйста, примите это как правильный ответ. - person rakensi; 25.08.2013

urlfetch может использоваться для доступа только к внутренним URL-адресам, таким как частные серверные части - если бы это было невозможно, не было бы возможности общаться в вашем приложении! Однако лучшей идеей может быть использование очереди задач, которую можно настроить для выполнения задач на сервере.

person Nick Johnson    schedule 12.07.2011
comment
Как вы настраиваете задачи для работы с серверной частью? - person gregm; 25.08.2011
comment
Указав URL-адрес серверной части в качестве целевого URL-адреса задачи. code.google.com/appengine/docs/python/taskqueue/tasks. html - person Nick Johnson; 26.08.2011

Я не пробовал функции Backends движка приложений Google, потому что это модель ценообразования. Однако по документам:

http://code.google.com/appengine/docs/python/backends/overview.html#Public_and_Private_Backends

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

Я думаю, что GAE автоматически скроет URL-адрес серверной части от общедоступного посещения http (даже без необходимости настраивать app.yaml). Вы можете проверить его поведение, выйдя из системы и получив прямой доступ к URL-адресу серверной части.

person lucemia    schedule 11.07.2011