在 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 - 它死了吗? [关闭]

您如何在 Java 中使用 Google App Engine 数据存储中的列表属性?

google app engine java - 基于域的重定向