Изпълнение на Backend с помощта на Cron в Google App Engine (Java)

Имам настройка на Dynamic Backend на GAE, която искам да стартирам с cron на всеки 15 минути. Проблемът е, че cron изисква url, който започва с "/". Докато backend 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. Опитвайки се да стоите далеч от yaml колкото е възможно повече. Освен това мисля, че 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

Не съм пробвал Backend функциите на google app engine, защото неговият модел на ценообразуване. Но според документите:

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