Sottoscrizione agli eventi cron
Con questo tutorial imparerai come iscriverti agli eventi cron utilizzando la CLI di IBM Cloud® Code Engine.
Spesso negli ambienti distribuiti si desidera che le applicazioni o i lavori reagiscano ai messaggi (eventi) generati da altri componenti, che di solito sono chiamati produttori di eventi. Con Code Engine, le tue applicazioni o i tuoi processi possono ricevere gli eventi di interesse iscrivendosi ai produttori di eventi. Le informazioni relative agli eventi vengono ricevute sotto forma di richieste POST all'indirizzo HTTP per le applicazioni e sotto forma di variabili d'ambiente per i processi.
Prima di iniziare
Tutti gli utenti di Code Engine devono disporre di un account Pay-as-you-Go. Le esercitazioni possono comportare dei costi. Utilizza lo Strumento di stima dei costi per generare una stima dei costi in base al tuo utilizzo previsto. Per ulteriori informazioni, consulta la pagina dedicata ai prezzi di Code Engine.
Determinare l'intervallo di cron
Il produttore di eventi cron genera eventi a intervalli regolari. Questo intervallo può essere programmato per minuto, ora, giorno, mese o una combinazione di diversi intervalli di tempo.
Cron utilizza un crontab standard per specificare i dettagli dell'intervallo, nel formato " * * * * *, che sta per minuto, ora, giorno del mese, mese e giorno della settimana. Ad esempio, per programmare un evento a mezzanotte,
specificare " 0 0 * * *. Per programmare un evento per ogni venerdì a mezzanotte, specificare " 0 0 * * FRI.
È possibile impostare l'intervallo di cron utilizzando l'opzione '--schedule con il comando 'subscription cron, come mostrato al punto 3. Se non si specifica l'opzione '--schedule, per
impostazione predefinita l'evento cron viene inviato ogni minuto di ogni giorno.
Creare l'applicazione (o il lavoro)
Anche se gli eventi possono essere utilizzati per attivare applicazioni o lavori, questa esercitazione utilizza un'applicazione.
Creare l'applicazione chiamata 'cron-app con il comando 'ibmcloud ce app create. Questa applicazione estrae un'immagine chiamata
'icr.io/codeengine/cron. Questa app registra ogni evento non appena viene ricevuto, mostrando l'insieme completo delle intestazioni HTTP e il contenuto del corpo HTTP. Per ulteriori informazioni sul codice utilizzato in questo
esempio, vedere 'cron.
ibmcloud ce app create --name cron-app --image icr.io/codeengine/cron
Eseguire 'ibmcloud ce application get --name cron-app per verificare che l'applicazione sia in uno stato 'Ready.
Per ulteriori informazioni su questa applicazione, consultare il file readme di cron.
Creare una sottoscrizione
Dopo che la vostra applicazione è pronta, create una sottoscrizione al produttore di eventi cron e collegatela alla vostra applicazione con il comando 'ibmcloud ce sub cron create.
L'esempio seguente crea una sottoscrizione cron chiamata " cron-sub e specifica l'applicazione " cron-app come destinazione. La sottoscrizione utilizza l'opzione " --data per includere una
stringa JSON nell'evento cron. Specifica inoltre la pianificazione di cron utilizzando l'opzione '--schedule con un valore di '* * * * * per inviare un evento ogni minuto di ogni giorno all'applicazione 'cron-app.
ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'
Eseguire 'ibmcloud ce sub cron get -n cron-sub per trovare informazioni sull'abbonamento.
Output di esempio
In questo output, si può notare che il nome dell'abbonamento, la destinazione, la pianificazione e i dati sono corretti.
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
Verifica dell'abbonamento
Dopo aver sottoscritto l'applicazione all'evento cron, si possono esaminare i log per vedere se funziona.
Ottenere i log dell'applicazione con il comando 'ibmcloud ce app logs.
ibmcloud ce app logs --name cron-app
Output di esempio
Nell'output riportato di seguito è possibile vedere la data e l'ora di ricezione dell'evento, nonché le intestazioni HTTP e il corpo JSON HTTP che sono stati passati al momento della creazione della sottoscrizione.
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"}
Per ulteriori informazioni sulle intestazioni e sul corpo, consultare le informazioni relative alle intestazioni e al corpo degli eventi cron disponibili all'indirizzo HTTP.
Per ulteriori informazioni sulla visualizzazione dei registri con la CLI, vedere Visualizzazione dei registri con la CLI.
Si noti che le sottoscrizioni possono influenzare la scalabilità di un'applicazione. Per ulteriori informazioni, vedere Configurazione del ridimensionamento delle applicazioni.
Aggiornare l'abbonamento
Ora che si sa che la sottoscrizione a cron è andata a buon fine, si può aggiornare l'evento cron in modo che venga eseguito in un orario diverso con il comando 'ibmcloud ce sub cron update.
Ad esempio, aggiornare l'abbonamento in modo che venga eseguito ogni giorno a mezzanotte.
ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'
Eseguire il comando 'ibmcloud ce sub cron get -n cron-sub per trovare informazioni sull'abbonamento.
Output di esempio
In questo output si può notare che la pianificazione e i dati sono stati aggiornati.
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
Esercitazione di pulizia per l'abbonamento cron
Siete pronti a cancellare l'abbonamento cron e la vostra applicazione? È possibile utilizzare i comandi 'ibmcloud ce app delete e 'ibmcloud ce sub cron delete.
Per rimuovere l'abbonamento,
ibmcloud ce sub cron delete --name cron-sub
Per rimuovere la vostra applicazione,
ibmcloud ce app delete --name cron-app
Cercate altri esempi di codice? Dai un'occhiata agli esempi disponibili nel repository " IBM Cloud Code Engine " su GitHub.