訂閱 cron 事件

透過本教學,您可以學習如何使用 IBM Cloud® Code Engine 命令列介面(CLI)訂閱 cron 事件。

通常,在分散式環境中,您希望應用程式或作業會對其他元件(通常稱為事件產生器)產生的訊息(事件)做出反應。 透過 Code Engine,您的應用程式或工作可透過訂閱事件產生者,接收感興趣的事件。 應用程式會透過 POST HTTP 請求接收事件資訊,而工作則透過環境變數接收事件資訊。

開始之前

所有 Code Engine 使用者均須擁有一個「隨用隨付」帳戶。 教程可能會產生費用。 請使用「成本估算器」,根據您的預估使用量生成成本估算。 如需更多資訊,請參閱 Code Engine 價格資訊

確定您的 cron 間隔

cron 事件產生器會定期產生事件。 此間隔可依分鐘、小時、天或月或幾個不同時間間隔的組合來安排。

Cron 使用標準 crontab 來指定間隔詳細信息,格式為 * * * * *,代表分鐘、小時、月份中的某一天、月份和星期幾。 例如,要在午夜安排活動,請指定 0 0 * * *。 要安排每週五午夜的活動,請指定 0 0 * * FRI

您可以透過使用 --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"}

有關標頭與正文的更多資訊,請參閱 HTTP 中關於 cron 事件的標頭與正文資訊

有關使用 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 deleteibmcloud ce sub cron delete 命令。

若要刪除您的訂閱,

ibmcloud ce sub cron delete --name cron-sub

要刪除您的應用程序,

ibmcloud ce app delete --name cron-app

尋找更多程式碼範例? 請參閱 「IBM Cloud Code Engine」GitHub 儲存庫中的範例