Assinando eventos de cron
Com este tutorial, é possível aprender a se inscrever em eventos de cron usando a CLI da IBM Cloud® Code Engine.
Muitas vezes, em ambientes distribuídos, você deseja que os seus aplicativos ou tarefas reajam a mensagens (eventos) que são geradas por meio de outros componentes, que geralmente são chamados de produtores de evento. Com o Code Engine, seus aplicativos ou tarefas podem receber eventos de interesse assinando os produtores de evento. As informações do evento são recebidas como solicitações de HTTP POST para aplicativos e como variáveis de ambiente para tarefas.
Antes de Iniciar
Todos os usuários do Code Engine são obrigados a ter uma conta pré-paga. Os tutoriais podem gerar custos adicionais. Use o Estimador de custos para gerar uma estimativa de custo com base em seu uso planejado. Para obter mais informações, consulte Code Engine preços.
Determine o seu intervalo de cron
O produtor de evento de cron gera eventos em intervalos regulares. Esse intervalo pode ser planejado por minuto, hora, dia, mês ou por uma combinação de vários intervalos de tempos diferentes.
O Cron usa um crontab padrão para especificar os detalhes do intervalo, no formato * * * * *
, que significa minuto, hora, dia do mês, mês e dia da semana. Por exemplo, para planejar um evento para a meia-noite, especifique 0 0 * * *
.
Para planejar um evento para todas as sextas-feiras à meia-noite, especifique 0 0 * * FRI
.
Para obter mais informações sobre o crontab, consulte CRONTAB.
É possível configurar o seu intervalo de cron usando a opção --schedule
com o comando subscription cron
, como mostrado na Etapa 3. Se você não especificar a opção --schedule
, por padrão,
o evento cron será enviado a cada minuto de cada dia.
Crie seu app (ou tarefa)
Enquanto os eventos podem ser usados para acionar apps ou tarefas, este tutorial usa um app.
Crie seu aplicativo chamado cron-app
com o comando ibmcloud ce app create
. Este app extrai uma imagem que é chamada icr.io/codeengine/cron
.
Esse app registra cada evento à medida que ele chega, mostrando o conjunto completo de carga útil de Cabeçalhos de HTTP e de Corpo de HTTP. Para obter mais informações sobre o código usado neste exemplo, consulte ' cron
.
ibmcloud ce app create --name cron-app --image icr.io/codeengine/cron
Execute ibmcloud ce application get --name cron-app
para verificar se o seu app está em um estado Ready
.
Você pode encontrar mais informações sobre esse aplicativo no arquivo readme do cron.
Criar uma assinatura
Depois que seu aplicativo estiver pronto, crie uma assinatura para o produtor de evento de cron e conecte-o ao seu aplicativo com o comando ibmcloud ce sub cron create
.
O exemplo a seguir cria uma assinatura de cron chamada cron-sub
e especifica o aplicativo cron-app
como seu destino. A assinatura usa a opção --data
para incluir uma sequência JSON no evento de cron. Ela
também especifica a programação do cron usando a opção --schedule
com um valor de * * * * *
para enviar um evento a cada minuto de cada dia para o aplicativo cron-app
.
ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'
Execute ibmcloud ce sub cron get -n cron-sub
para localizar informações sobre a sua assinatura.
Exemplo de saída
Nessa saída, é possível ver que o nome da assinatura, o destino, o planejamento e os dados estão corretos.
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
Testando a sua assinatura
Depois de inscrever com sucesso seu aplicativo para o evento cron, veja os logs para ver se ele funciona.
Obtenha os logs do app com o comando ibmcloud ce app logs
.
ibmcloud ce app logs --name cron-app
Exemplo de saída
Na saída a seguir, é possível ver que a data e hora em que o evento foi recebido, bem como os Cabeçalhos HTTP e o JSON do Corpo HTTP que foi transmitido quando a assinatura foi criada.
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 obter mais informações sobre cabeçalhos e corpo, consulte Informações de cabeçalhos HTTP e corpo para eventos de cron.
Para obter mais informações sobre visualização de logs com a CLI, consulte Visualização de logs com a CLI.
Observe que as assinaturas podem afetar como um aplicativo é escalado. Para obter mais informações, consulte Configurando o ajuste de escala do aplicativo.
Atualizar a sua assinatura
Agora que você sabe que sua assinatura de cron foi bem-sucedida, é possível atualizar o evento de cron para ser executado em uma programação diferente com o comando ibmcloud ce sub cron update
.
Por exemplo, atualize a assinatura para que ela seja executada todos os dias à meia-noite.
ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'
Execute o comando ibmcloud ce sub cron get -n cron-sub
para localizar informações sobre a sua assinatura.
Exemplo de saída
Nessa saída, é possível ver que o planejamento e os dados são atualizados.
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
Tutorial de limpeza de assinatura de cron
Pronto para excluir sua assinatura de cron e seu aplicativo? É possível usar os comandos ibmcloud ce app delete
e ibmcloud ce sub cron delete
.
Para remover a sua assinatura,
ibmcloud ce sub cron delete --name cron-sub
Para remover o seu aplicativo,
ibmcloud ce app delete --name cron-app
Procurando mais exemplos de código? Confira as amostras para IBM Cloud Code Engine No repositório GitHub.