Suscripción a sucesos de cron
Con esta guía de aprendizaje, puede aprender a suscribirse a los sucesos de cron mediante la CLI de IBM Cloud® Code Engine.
En entornos distribuidos, a menudo deseará que las aplicaciones o trabajos reaccionen a los mensajes (sucesos) que se generan en otros componentes, normalmente llamados generadores de sucesos. Con Code Engine, las aplicaciones o los trabajos pueden recibir sucesos de interés suscribiéndose a productores de sucesos. La información de sucesos se recibe como solicitudes POST HTTP para aplicaciones y como variables de entorno para trabajos.
Antes de empezar
Todos los usuarios de Code Engine están obligados a tener una cuenta de pago por uso. Las guías de aprendizaje pueden incurrir en costes. Utilice el Estimador de costes para generar una estimación de costes basada en el uso previsto. Para obtener más información, consulte Code Engine precios.
Determine el intervalo de cron
El productor de sucesos de cron genera sucesos a intervalos regulares. Este intervalo se puede planificar por minuto, hora, día o mes o una combinación de varios intervalos de tiempo diferentes.
Cron utiliza un crontab estándar para especificar los detalles del intervalo, en el formato * * * * *
, que se sitúa por minuto, hora, día del mes, mes y día de la semana. Por ejemplo, para planificar un suceso para medianoche, especifique
0 0 * * *
. Para planificar un suceso para cada viernes a medianoche, especifique 0 0 * * FRI
.
Para obtener más información sobre crontab, consulte CRONTAB.
Puede establecer el intervalo cron utilizando la opción --schedule
con el mandato subscription cron
, como se muestra en el Paso 3. Si no especifica la opción --schedule
, de forma predeterminada,
el suceso cron se envía cada minuto de cada día.
Cree su aplicación (o trabajo)
Se pueden utilizar sucesos para desencadenar aplicaciones o trabajos, en esta guía de aprendizaje se utiliza una aplicación.
Cree la aplicación llamada cron-app
con el mandato ibmcloud ce app create
. Esta aplicación extrae una imagen denominada icr.io/codeengine/cron
.
Esta app registra cada suceso a medida que llega y muestra el conjunto completo de cabeceras HTTP y carga útil del cuerpo de HTTP. Para más información sobre el código que se utiliza en este ejemplo, consulte ' cron
.
ibmcloud ce app create --name cron-app --image icr.io/codeengine/cron
Ejecute ibmcloud ce application get --name cron-app
para verificar que la app está en estado Ready
.
Puede encontrar más información sobre esta aplicación en el archivo cron readme.
Crear una suscripción
Después de que la app esté lista, cree una suscripción al productor de sucesos de cron y conéctela a la app con el mandato ibmcloud ce sub cron create
.
En el ejemplo siguiente se crea una suscripción de cron llamada cron-sub
y especifica la aplicación cron-app
como destino. La suscripción utiliza la opción --data
para incluir una serie JSON en el suceso
de cron. También especifica la planificación de cron utilizando la opción --schedule
con un valor de * * * * *
para enviar un suceso cada minuto de cada día a la aplicación cron-app
.
ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'
Ejecute ibmcloud ce sub cron get -n cron-sub
para encontrar información sobre la suscripción.
Salida de ejemplo
En esta salida, puede ver que el nombre de la suscripción, el destino, la planificación y los datos son correctos.
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
Prueba de la suscripción
Después de haber suscrito correctamente la app en el suceso cron, consulte los registros para ver si funciona.
Obtenga los registros de la app con el mandato ibmcloud ce app logs
.
ibmcloud ce app logs --name cron-app
Salida de ejemplo
En la salida siguiente, puede ver la fecha y la hora a la que se ha recibido el suceso, así como las cabeceras HTTP y el JSON de cuerpo HTTP que se ha pasado al crear la suscripción.
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"}
Para obtener más información sobre las cabeceras y el cuerpo, consulte Información de cuerpo y cabeceras HTTP para sucesos de cron.
Para obtener más información sobre la visualización de registros con la CLI, consulte Visualización de registros con la CLI.
Tenga en cuenta que las suscripciones pueden afectar a la forma de escalado de la aplicación. Para obtener más información, consulte Configuración del escalado de una aplicación.
Actualización de la suscripción
Ahora que sabe que la suscripción de cron es correcta, puede actualizar el suceso de cron para que se ejecute según una planificación distinta con el mandato ibmcloud ce sub cron update
.
Por ejemplo, actualice la suscripción para que se ejecute todos los días a medianoche.
ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'
Ejecute el mandato ibmcloud ce sub cron get -n cron-sub
para encontrar información sobre la suscripción.
Salida de ejemplo
En esta salida, puede ver que la planificación y los datos se han actualizado.
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
Guía de aprendizaje para Limpieza para la suscripción de cron
¿Está listo para suprimir su suscripción de cron y su app? Puede utilizar los mandatos ibmcloud ce app delete
y ibmcloud ce sub cron delete
.
Para eliminar la suscripción,
ibmcloud ce sub cron delete --name cron-sub
Para eliminar la aplicación,
ibmcloud ce app delete --name cron-app
¿Desea ver más ejemplos de código? Echa un vistazo a los ejemplos de IBM Cloud Code Engine Repositorio de GitHub.