订阅 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代码库。