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
- Konfigurieren Sie die Umgebung der Code Engine-Befehlszeilenschnittstelle.
- Erstellen Sie ein Projekt und arbeiten Sie damit.
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.