在 Google App Engine (Java) 中使用 Cron 执行后端
Posted
技术标签:
【中文标题】在 Google App Engine (Java) 中使用 Cron 执行后端【英文标题】:Execute Backends using Cron in Google App Engine (Java) 【发布时间】:2011-10-03 00:08:16 【问题描述】:我在 GAE 上有一个动态后端设置,我想使用 cron 每 15 分钟运行一次。问题是 cron 需要一个以“/”开头的 url。而后端 URL 使用以下格式:http://backendname.yourapp.appspot.com。
我在其他论坛上看到您可以使用 fetchurl 来调用您的后端,但我认为这不是 理想 方式。因为这需要您将后端公开访问。
根据谷歌的文档: http://code.google.com/appengine/docs/java/backends/overview.html#Public_and_Private_Backends
“应用程序管理员、应用程序实例以及 App Engine API 和服务(例如任务队列任务和 Cron 作业)无需任何特殊配置即可访问私有后端。”
有没有人通过在 cron.xml 中声明来调用后端?
【问题讨论】:
有趣的问题!顺便说一句,由于您可以将 app.yaml 配置为仅允许管理员访问 url,因此 fetchurl 不会使您的后端变得可公开访问。 @lucemia 我正在使用 backends.xml。尽量远离 yaml。另外,我认为 fethurl 只能调用公共 URL。 【参考方案1】:使用目标标签在你的 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>
【讨论】:
它也适用于我。文档建议目标元素指定您的应用程序的版本,但它适用于后端名称。 @Jay Q.:请考虑接受这个作为正确答案。【参考方案2】:urlfetch 可用于访问仅限内部的 URL,例如私有后端 - 如果这不可行,则无法在您的应用程序内进行通信!不过,更好的主意可能是使用任务队列,它可以配置为针对后端运行任务。
【讨论】:
如何配置任务以针对后端运行? 通过指定后端的 URL 作为任务目标 URL。 code.google.com/appengine/docs/python/taskqueue/tasks.html【参考方案3】:我没有尝试过谷歌应用引擎的后端功能,因为它的定价模式。 但是,根据文件:
http://code.google.com/appengine/docs/python/backends/overview.html#Public_and_Private_Backends
默认情况下,后端是私有的,因为它们通常作为应用程序内部的一个组件,而不是作为其公共面孔。
我认为 GAE 会自动隐藏后端 url 以防止公共 http 访问(即使不需要配置 app.yaml)。您可以通过注销并直接访问后端 url 来测试其行为。
【讨论】:
以上是关于在 Google App Engine (Java) 中使用 Cron 执行后端的主要内容,如果未能解决你的问题,请参考以下文章
在单个 Google App Engine 项目中同时使用 Java 和 Python
在 Google App Engine (Java) 中使用 Cron 执行后端
Google App Engine——Java 还是 Python? [关闭]
Google-App-Engine 上的 Grails - 它死了吗? [关闭]