IBM Cloud Docs
Cron-Ereignisse abonnieren

Cron-Ereignisse abonnieren

In diesem Lernprogramm erfahren Sie, wie Sie Cron-Ereignisse über die IBM Cloud® Code Engine-Befehlszeilenschnittstelle (CLI) abonnieren können.

In verteilten Umgebungen ist es oftmals erwünscht, dass Anwendungen oder Jobs auf Nachrichten (Ereignisse) reagieren, die von anderen, zumeist als Ereignisproduzenten bezeichneten Komponenten generiert werden. Mit Code Engine können Ihre Anwendungen und Jobs relevante Ereignisse empfangen, indem Ereignisproduzenten abonniert werden. Ereignisinformationen werden für Anwendungen als POST-HTTP-Anforderungen und für Jobs als Umgebungsvariablen empfangen.

Vorbereitende Schritte

Alle Code Engine-Benutzer müssen über ein nutzungsabhängiges Konto verfügen. Für Tutorien können Kosten anfallen. Verwenden Sie den Cost Estimator, um einen Kostenvoranschlag auf der Grundlage Ihrer voraussichtlichen Nutzung zu erstellen. Weitere Informationen finden Sie unter Code Engine Preisgestaltung.

Cron-Intervall festlegen

Der Cron-Ereignisproduzent generiert in regelmäßigen Abständen Ereignisse. Dieses Intervall kann in Minuten, Stunden, Tagen, Monaten oder einer Kombination mehrerer Zeitintervalle angegeben werden.

Cron verwendet zur Angabe von Intervalldetails eine Crontab-Standardsyntax im Format * * * * *, das für die Minute, die Stunde, den Tag des Monats, den Monat und den Wochentag steht. Wenn Sie beispielsweise ein Ereignis für Mitternacht planen möchten, geben Sie 0 0 * * * an. Wenn Sie ein Ereignis für jeden Freitag um Mitternacht planen möchten, geben Sie 0 0 * * FRI an.

Weitere Informationen über crontab finden Sie unter CRONTAB.

Sie können Ihr Cron-Intervall festlegen, indem Sie die Option --schedule mit dem Befehl subscription cron verwenden, wie in Schritt 3 gezeigt. Wenn Sie die Option --schedule nicht angeben, wird das Cron-Ereignis standardmäßig jede Minute eines jeden Tages gesendet.

App (oder Job) erstellen

Während Ereignisse verwendet werden können, um Apps oder Jobs auszulösen, verwendet dieses Lernprogramm eine App.

Erstellen Sie Ihre Anwendung namens cron-app mit dem Befehl ibmcloud ce app create. Diese App extrahiert ein Image namens icr.io/codeengine/cron. Die App protokolliert jedes Ereignis bei dessen Eingang; dabei werden die gesamten HTTP-Header und HTTP-Hauptteilnutzdaten dokumentiert. Weitere Informationen über den Code, der für dieses Beispiel verwendet wird, finden Sie unter " cron.

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

Überprüfen Sie mit dem Befehl ibmcloud ce application get --name cron-app, ob Ihre App den Status Ready (Bereit) aufweist.

Weitere Informationen zu dieser Anwendung finden Sie in der Readme-Datei von cron.

Subskription erstellen

Sobald Ihre App bereit ist, führen Sie den Befehl ibmcloud ce sub cron create aus, um ein Abonnement für den Cron-Ereignisproduzenten zu erstellen und es mit der App zu verbinden.

Im folgenden Beispiel wird ein Cron-Abonnement namens cron-sub erstellt und die Anwendung cron-app als Ziel angegeben. Das Abonnement verwendet die Option --data, damit in das Cron-Ereignis eine JSON-Zeichenfolge einbezogen wird. Außerdem gibt es den Cron-Zeitplan an; hierzu wird die Option --schedule mit dem Wert * * * * * verwendet, damit täglich einmal pro Minute ein Ereignis an die Anwendung cron-app gesendet wird.

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

Mit dem Befehl ibmcloud ce sub cron get -n cron-sub können Sie Informationen zu Ihrem Abonnement abrufen.

Beispielausgabe

Diese Ausgabe zeigt, dass der Name des Abonnements, das Ziel, der Zeitplan und die Daten korrekt sind.

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

Abonnement testen

Nachdem Sie erfolgreich das Cron-Ereignis für Ihre App abonniert haben, sehen Sie sich die Protokolle an, um festzustellen, ob die App funktioniert.

Rufen Sie mit dem Befehl ibmcloud ce app logs die Protokolle für die App ab.

ibmcloud ce app logs --name cron-app

Beispielausgabe

Die folgende Ausgabe zeigt den Zeitpunkt (Datum und Uhrzeit), zu dem das Ereignis empfangen wurde, sowie die HTTP-Header und die JSON-Daten des HTTP-Hauptteils, die bei der Erstellung des Abonnements eingegeben wurden.

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"}  

Weitere Informationen zu Headern und zum Hauptteil finden Sie unter Informationen zu HTTP-Headern und -Hauptteilen für Cron-Ereignisse.

Weitere Informationen zum Anzeigen von Protokollen über die CLI finden Sie unter Protokolle mit der CLI anzeigen.

Dabei ist zu beachten, dass sich Abonnements auf die Skalierung einer Anwendung auswirken können. Weitere Informationen finden Sie im Abschnitt Anwendungsskalierung konfigurieren.

Abonnement aktualisieren

Da Sie jetzt wissen, dass Ihr Cron-Abonnement erfolgreich erstellt worden ist, können Sie das Cron-Ereignis mit dem Befehl ibmcloud ce sub cron update so aktualisieren, dass es nach einem anderen Zeitplan ausgeführt wird. Beispielsweise können Sie das Abonnement so aktualisieren, dass die Ausführung täglich um Mitternacht erfolgt.

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

Mit dem Befehl ibmcloud ce sub cron get -n cron-sub können Sie Informationen zu Ihrem Abonnement abrufen.

Beispielausgabe

In dieser Ausgabe können Sie sehen, dass der Zeitplan und die Daten aktualisiert werden.

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

Lernprogramm für Bereinigung des Cron-Abonnements

Sollen das Cron-Abonnement und Ihre App gelöscht werden? Hierzu können Sie die Befehle ibmcloud ce app delete und ibmcloud ce sub cron delete verwenden.

Zum Entfernen des Abonnements lautet der Befehl wie folgt:

ibmcloud ce sub cron delete --name cron-sub

Zum Entfernen der Anwendung lautet der Befehl wie folgt:

ibmcloud ce app delete --name cron-app

Benötigen Sie weitere Codebeispiele? Sehen Sie sich die Samples für IBM Cloud Code Engine GitHub.