如何在App Engine中创建一个针对服务和版本的cron作业?

问题描述 投票:0回答:1

我希望有一个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-两次或使用。两次。我无法控制网址中的第二个点(它不是配置的一部分)。但是当我将点更改为。在上面的配置中,我收到以下错误:

配置错误:XML错误验证/ CleanupRealtimeDatabase dev.admin清理实时数据库(Dev)每24小时针对/ Users / user / sdk / google-cloud-sdk / platform / google_appengine / google / appengine / tools / java / docs / cron。 xsd引起:cvc-pattern-valid:对于类型为'target-Type'的模式'[az \ d - ] {1,100}',值'dev.admin'不是facet-valid。

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

java google-app-engine cron
1个回答
2
投票

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

目标字符串将添加到您应用的主机名之前。它通常是服务的名称。 cron作业将路由到为流量配置的命名服务的版本。

警告:如果在启用traffic splitting的情况下运行cron作业,请小心。来自cron作业的请求始终从相同的IP地址发送,因此如果您指定了IP地址拆分,则逻辑将每次将请求路由到相同的版本。如果您已指定cookie拆分,则根本不会拆分请求,因为请求中没有cookie。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.