訂閱 cron 事件
透過本教學課程,您可以了解如何使用IBM Cloud® Code Engine CLI 訂閱 cron 事件。
通常,在分散式環境中,您希望應用程式或作業會對其他元件(通常稱為事件產生器)產生的訊息(事件)做出反應。 使用Code Engine,您的應用程式或作業可以透過訂閱事件產生器來接收感興趣的事件。 事件資訊會作為應用程式的 POST HTTP 請求和作業的環境變數來接收。
開始之前
所有Code Engine使用者都必須擁有即用即付帳戶。 教程可能會產生費用。 使用成本估算器根據您的預計使用情況產生成本估算。 有關更多信息,請參閱 Code Engine定價。
確定您的 cron 間隔
cron 事件產生器會定期產生事件。 此間隔可依分鐘、小時、天或月或幾個不同時間間隔的組合來安排。
Cron 使用標準 crontab 來指定間隔詳細信息,格式為 * * * * *
,代表分鐘、小時、月份中的某一天、月份和星期幾。 例如,要在午夜安排活動,請指定 0 0 * * *
。 要安排每週五午夜的活動,請指定 0 0 * * FRI
。
有關 crontab 的更多信息,請參閱 CRONTAB。
您可以透過使用 --schedule
選項和 subscription cron
指令來設定 cron 間隔,如步驟 3 所示。 如果您不指定 --schedule
選項,則預設情況下,每天每分鐘都會發送 cron 事件。
創建您的應用程式(或工作)
雖然事件可用於觸發應用程式或作業,但本教學課程使用應用程式。
使用 ibmcloud ce app create
命令建立名為 cron-app
的應用程式。 該應用程式提取一個名為 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 自述文件中找到有關此應用程式的更多資訊。
建立訂閱
您的應用程式準備好後,建立對 cron 事件產生器的訂閱,並使用 ibmcloud ce sub cron create
命令將其連接到您的應用程式。
以下範例建立一個名為 cron-sub
cron 訂閱,並將 cron-app
應用程式指定為其目標。 訂閱使用 --data
選項在 cron 事件中包含 JSON 字串。 它還透過使用值為 * * * * *
的 --schedule
選項來指定 cron 計劃,以便每天每分鐘向 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儲存庫的範例。