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.