【问题标题】:How to make a cron job in App Engine that targets a service and a version?如何在 App Engine 中针对服务和版本进行 cron 作业?
【发布时间】:2018-08-14 03:58:20
【问题描述】:

我想要一个 cron 作业,以特定服务和版本(App Engine)调用我的端点。

我使用以下配置创建了一个 cron 作业:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/CleanupRealtimeDatabase</url>
        <target>dev-dot-admin</target>
        <description>Cleanup Realtime Database (Dev)</description>
        <schedule>every 24 hours</schedule>
    </cron>
</cronentries>

这将调用http://dev-dot-admin.myapp.appspot.com/CleanupRealtimeDatabase

这不起作用,因为它不能将 -dot- 和 .

所以唯一的解决方案是使用 -dot- 两次或使用 .两次。我无法控制 url 中的第二个点(它不是配置的一部分)。但是当我将点更改为 .在我上面的配置中,我收到以下错误:

错误配置:XML 错误验证 /清理实时数据库 开发管理员 清理实时数据库(开发) 每 24 小时 针对 /Users/user/sdk/google-cloud-sdk/platform/google_appengine/google/appengine/tools/java/docs/cron.xsd 原因:cvc-pattern-valid:值“dev.admin”不是 facet-valid 关于“target-Type”类型的模式“[a-z\d-]{1,100}”。

不知道如何解决这个问题?感觉就像 App Engine 工具中的一个错误。

【问题讨论】:

    标签: java google-app-engine cron


    【解决方案1】:

    这将不起作用,因为将接收目标 cron 请求的(单一)服务版本不受 cron 配置控制。从Cron job definitions 中的 行(强调我的):

    target 字符串会附加到您应用的主机名中。它是 通常是服务的名称。 cron 作业将被路由到 为流量配置的命名服务的版本

    警告:如果您在启用 traffic splitting 的情况下运行 cron 作业,请小心。来自 cron 作业的请求总是被发送 来自同一个 IP 地址,所以如果您指定了 IP 地址拆分, 该逻辑每次都会将请求路由到相同的版本。如果 您已指定 cookie 拆分,请求将不会在 全部,因为请求中没有 cookie。

    如果未找到为 target 指定的服务名称,则 Cron 请求将路由到 default 服务,或 配置为接收流量的应用版本。为了 有关路由的更多信息,请参阅How Requests are Routed

    但是由于 cron 服务只不过是根据计划发送的 GET 请求,因此您可以拥有一个通用的 cron 配置,并在其处理程序中向您自己发出更具体的 HTTP(S) 请求到您想要的任何 URL。

    您可以使用apps.services.versions API 来动态构建每个服务版本对 URL 的正确列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-09-12
      • 2010-11-04
      • 2012-08-08
      相关资源
      最近更新 更多