IBM Cloud Docs
订阅 cron 事件

订阅 cron 事件

通过本教程,您可以学习如何使用IBM Cloud® Code Engine订阅 cron 事件。CLI。

在分布式环境中,您经常希望您的应用程序或作业对其他组件(通常称为事件生产者)生成的消息(事件)做出反应。 使用Code Engine,您的应用程序或工作可以通过订阅事件生产者来接收感兴趣的事件。 对于应用程序,事件信息以 POST HTTP 请求的形式接收,对于作业,则以环境变量的形式接收。

准备工作

所有Code Engine用户都必须拥有即用即付账户。 教程可能会产生费用。 使用“成本估算器”根据您的预计使用量生成成本估算。 更多信息,请参阅 Code Engine定价

确定 cron 时间间隔

cron 事件生成器会定期生成事件。 这个时间间隔可以按分钟、小时、天、月或几个不同时间间隔的组合来安排。

Cron 使用标准的 crontab 来指定时间间隔的详细信息,格式为 "* * * * *,代表分钟、小时、月日、月份和星期。 例如,要将事件安排在午夜,请指定 "0 0 * * *。 要将事件安排在每周五午夜,请指定 "0 0 * * FRI

有关 crontab 的更多信息,请参阅 CRONTAB

如步骤 3 所示,您可以使用“--schedule 选项和”subscription cron 命令来设置 cron 时间间隔。 如果不指定 "--schedule 选项,则默认情况下每天每分钟发送一次 cron 事件。

创建应用程序(或工作)

虽然事件可用于触发应用程序或作业,但本教程使用的是应用程序。

Create your application called cron-app with the ibmcloud ce app create command. 该应用程序会提取一张名为 "icr.io/codeengine/cron 的图片。 该应用程序会记录每个到达的事件,显示整套 HTTP 头信息和 HTTP 主体有效载荷。 有关本示例所用代码的更多信息,请参阅 "cron

ibmcloud ce app create --name cron-app --image icr.io/codeengine/cron

运行“ibmcloud ce application get --name cron-app,验证应用程序是否处于”Ready 状态。

有关此应用程序的更多信息,请参阅 cron readme 文件

创建预订

应用程序准备就绪后,创建 cron 事件生产者订阅,并使用 "ibmcloud ce sub cron create 命令将其连接到应用程序。

下面的示例创建了一个名为“cron-sub 的 cron 订阅,并指定”cron-app 应用程序为其目标。 订阅使用 "--data 选项在 cron 事件中包含一个 JSON 字符串。 它还指定了 cron 计划,使用 "--schedule 选项和 "* * * * * 值,每天每分钟向 "cron-app 应用程序发送一个事件。

ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'

运行 "ibmcloud ce sub cron get -n cron-sub 查找订阅信息。

示例输出

在此输出中,可以看到订阅名称、目的地、计划和数据都是正确的。

Getting cron event subscription 'cron-sub'...
OK

Name:          cron-sub  
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject  
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111  
Age:           2m18s  
Created:       2021-03-14T13:21:13-05:00   

Destination Type:  app  
Destination:       cron-app  
Schedule:          * * * * *  
Time Zone:         UTC  
Data:              {"mydata":"hello world"}  
Ready:             true  

Events:    
    Type     Reason                 Age                Source                 Messages   
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

测试您的订阅

成功将应用程序订阅到 cron 事件后,请查看日志以确定其是否有效。

使用 "ibmcloud ce app logs 命令获取应用程序的日志。

ibmcloud ce app logs --name cron-app

示例输出

在以下输出中,您可以看到收到事件的日期和时间,以及创建订阅时传入的 HTTP 头信息和 HTTP 主体 JSON。

2021-01-21 20:15:00 - Received:  
Header: Accept-Encoding=[gzip]  
Header: Ce-Id=[7de01e8e-84dc-4409-ad56-90d6e391397c]  
Header: Ce-Source=[/apis/v1/namespaces/50d38123af5/pingsources/cron-sub]  
Header: Ce-Specversion=[1.0]  
Header: Ce-Time=[2021-01-21T20:15:00.392503458Z]  
Header: Ce-Type=[dev.knative.sources.ping]  
Header: Content-Length=[24]  
Header: Content-Type=[application/json]  
Header: Forwarded=[for=172.30.118.174;proto=http, for=172.30.95.204]  
Header: K-Proxy-Request=[activator]  
Header: Traceparent=[00-1bf4b6b1d67f278a4b827e4e00f0cf7c-cbce9df0faedd812-00]  
Header: User-Agent=[Go-http-client/1.1]  
Header: X-B3-Sampled=[0]  
Header: X-B3-Spanid=[fb208eaa6af15ede]  
Header: X-B3-Traceid=[6db074fdaf6a6411fb208eaa6af15ede]  
Header: X-Envoy-Attempt-Count=[1]  
Header: X-Envoy-Decorator-Operation=[cron-app-snva7-1.50d38123af5.svc.cluster.local:80/*]  
Header: X-Envoy-Internal=[true]  
Header: X-Envoy-Peer-Metadata=[ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwo5CgxJTlNUQU5DRV9JUFMSKRonMTcyLjMwLjk1LjIwNCxmZTgwOjplODBiOjFkZmY6ZmVmMjo1ZjkxCpQCCgZMQUJFTFMSiQIqhgIKHQoDYXBwEhYaFGlzdGlvLWluZ3Jlc3NnYXRld2F5ChMKBWNoYXJ0EgoaCGdhdGV3YXlzChQKCGhlcml0YWdlEggaBlRpbGxlcgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQofChFwb2QtdGVtcGxhdGUtaGFzaBIKGghkNzY1NjljOQoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0ChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAotCgROQU1FEiUaI2lzdGlvLWluZ3Jlc3NnYXRld2F5LWQ3NjU2OWM5LWw5cHZoChsKCU5BTUVTUEFDRRIOGgxpc3Rpby1zeXN0ZW0KXQoFT1dORVISVBpSa3ViZXJuZXRlczovL2FwaXMvYXBwcy92MS9uYW1lc3BhY2VzL2lzdGlvLXN5c3RlbS9kZXBsb3ltZW50cy9pc3Rpby1pbmdyZXNzZ2F0ZXdheQo5Cg9TRVJWSUNFX0FDQ09VTlQSJhokaXN0aW8taW5ncmVzc2dhdGV3YXktc2VydmljZS1hY2NvdW50CicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]  
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.95.204~istio-ingressgateway-d76569c9-l9pvh.istio-system~istio-system.svc.cluster.local]  
Header: X-Forwarded-For=[172.30.118.174, 172.30.95.204, 172.30.163.42]  
Header: X-Forwarded-Proto=[http]  
Header: X-Request-Id=[ce502e5e-dd89-401e-a4cd-b72a6822f689]  

Body: {"mydata":"hello world"}  

有关标题和正文的更多信息,请参阅 cron 事件的 HTTP 标题和正文信息

有关使用 CLI 查看日志的更多信息,请参阅 使用 CLI 查看日志

请注意,订阅会影响应用程序的扩展。 更多信息,请参阅 配置应用程序缩放

更新您的订阅

现在您已经知道 cron 订阅成功,可以使用 "ibmcloud ce sub cron update 命令更新 cron 事件,使其在不同的日程上运行。 例如,将订阅更新为每天午夜运行。

ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'

运行 "ibmcloud ce sub cron get -n cron-sub 命令查找订阅信息。

示例输出

在该输出中,可以看到计划和数据都已更新。

Getting cron event subscription 'cron-sub'...
OK

Name:          cron-sub  
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject  
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           5m7s  
Created:       2021-03-14T13:21:13-05:00   

Destination:  App:cron-app  
Schedule:     0 0 * * *  
Data:         {"mydata":"hello world again"}  
Ready:        true

Events:    
    Type     Reason                 Age                Source                 Messages   
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

清理 cron 订阅教程

准备好删除您的 cron 订阅和应用程序了吗? 您可以使用“ibmcloud ce app delete 和”ibmcloud ce sub cron delete 命令。

要取消订阅

ibmcloud ce sub cron delete --name cron-sub

删除您的申请、

ibmcloud ce app delete --name cron-app

想了解更多代码示例? 查看 IBM Cloud Code Engine示例}GitHub代码库