O fluxo de trabalho pode ter de aguardar um processo externo. Pode usar callbacks HTTP para aguardar que outro serviço faça um pedido a um ponto final de callback. Esse pedido retoma a execução do fluxo de trabalho. Também pode aguardar através da sondagem.
Em vez de usar a sondagem, este tutorial demonstra como pode aguardar eventos ou mensagens do Pub/Sub usando callbacks HTTP e acionadores do Eventarc. Embora possa acionar um fluxo de trabalho com eventos ou mensagens Pub/Sub, pode querer interromper essa execução para aguardar outro evento antes de continuar. Por exemplo, um evento aciona um fluxo de trabalho para iniciar um processo, mas o fluxo de trabalho tem de aguardar outro evento que indique que o processo está concluído. Pode implementar esta situação fazendo com que um fluxo de trabalho chame outro fluxo de trabalho.
Crie uma base de dados do Firestore
O Firestore armazena os seus dados em documentos que contêm campos mapeados para valores. Estes documentos são armazenados em coleções, que são contentores para os seus documentos que pode usar para organizar os seus dados e criar consultas. Saiba mais sobre o Firestore.
Tenha em atenção que cada Google Cloud projeto está limitado a uma base de dados do Firestore. Conclua os passos seguintes se precisar de criar uma nova base de dados.
Consola
Na Google Cloud consola, aceda à página do Firestore Começar.
Clique em Selecionar modo nativo.
Para orientações sobre a seleção de um modo de base de dados e uma comparação detalhada das funcionalidades, consulte o artigo Escolher entre o modo nativo e o modo Datastore.
Na lista Selecionar uma localização, selecione nam5 (Estados Unidos).
A localização aplica-se à base de dados do Firestore e à aplicação do App Engine no seu Google Cloud projeto. Depois de criar a base de dados, não pode alterar a localização.
Clique em Criar base de dados.
gcloud
Para criar uma base de dados do Firestore, primeiro tem de criar uma aplicação do App Engine e, em seguida, executar o comando gcloud firestore databases create
:
gcloud app create --region=us-central gcloud firestore databases create --region=us-central
Pode ignorar o aviso us-central is not a valid Firestore location
.
O App Engine e o Firestore suportam as mesmas localizações, mas a região us-central
(Iowa) do App Engine é mapeada para a multirregião nam5
(Estados Unidos) do Firestore.
Crie um tópico do Pub/Sub
Este tutorial usa o Pub/Sub como uma origem de eventos. Crie um tópico do Pub/Sub para poder publicar uma mensagem no mesmo. Saiba mais sobre como criar e gerir tópicos.
Consola
Na Google Cloud consola, aceda à página Tópicos do Pub/Sub.
Clique em
Criar tópico.No campo ID do tópico, introduza
topic-callback
.Aceite as outras predefinições.
Clique em Criar tópico.
gcloud
Para criar um tópico, execute o comando
gcloud pubsub topics create
:
gcloud pubsub topics create topic-callback
Crie um contentor do Cloud Storage
Este tutorial usa o Cloud Storage como uma origem de eventos. Crie um contentor do Cloud Storage para poder carregar um ficheiro para o mesmo. Saiba como criar contentores de armazenamento.
Consola
Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.
Clique em
Criar.Para o Nome do seu contentor, introduza
PROJECT_ID-bucket-callback
.O ID do projeto é usado no fluxo de trabalho
callback-event-sample
para identificar o contentor.Clique em Continuar.
Para Tipo de localização, selecione Região e, de seguida, selecione us-central1 (Iowa).
Aceite as outras predefinições.
Clique em Criar.
gcloud
Para criar um contentor, execute o comando
gcloud storage buckets create
:
gcloud storage buckets create gs://PROJECT_ID-bucket-callback \ --location=us-central1
O ID do projeto
é usado no fluxo de trabalho callback-event-sample
para identificar o contentor.
Depois de criar as origens de eventos, pode implementar o fluxo de trabalho do recetor de eventos.
Implemente um fluxo de trabalho que ouve eventos
O fluxo de trabalho callback-event-listener
é acionado quando uma mensagem é publicada num tópico do Pub/Sub ou quando um ficheiro é carregado para um contentor do Cloud Storage. O fluxo de trabalho recebe o evento, obtém os detalhes de chamada de retorno adequados da base de dados do Firestore e, em seguida, envia um pedido HTTP para o ponto final de chamada de retorno.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza um nome para o novo fluxo de trabalho:
callback-event-listener
.Na lista Região, selecione us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch callback-event-listener.yaml
Num editor de texto, copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:
Implemente o fluxo de trabalho introduzindo o seguinte comando:
gcloud workflows deploy callback-event-listener \ --source=callback-event-listener.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que criou anteriormente.
Implemente um fluxo de trabalho que aguarda eventos
O fluxo de trabalho callback-event-sample
armazena os detalhes de retorno de chamada numa base de dados do Firestore, interrompe a respetiva execução e, em seguida, aguarda a ocorrência de eventos específicos.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza um nome para o novo fluxo de trabalho:
callback-event-sample
.Na lista Região, selecione us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch callback-event-sample.yaml
Num editor de texto, copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:
Implemente o fluxo de trabalho introduzindo o seguinte comando:
gcloud workflows deploy callback-event-sample \ --source=callback-event-sample.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que criou anteriormente.
Crie um acionador do Eventarc para encaminhar eventos do Pub/Sub
Um acionador do Eventarc permite-lhe encaminhar eventos especificando filtros para o acionador, incluindo a origem do evento e o fluxo de trabalho de destino.
Crie um acionador do Eventarc para executar o fluxo de trabalho callback-event-listener
como resultado da publicação de uma mensagem num tópico do Pub/Sub.
Saiba mais sobre como acionar um fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Eventarc.
Clique em
Criar acionador.Escreva um Nome do acionador.
Por exemplo,
trigger-pubsub-events-listener
.Na lista Fornecedor de eventos, selecione Cloud Pub/Sub.
Na lista Evento, em Personalizado, selecione google.cloud.pubsub.topic.v1.messagePublished.
Na lista Selecionar um tópico do Cloud Pub/Sub, selecione o tópico que criou anteriormente.
Na lista Região, selecione us-central1 (Iowa).
Se lhe for pedido, conceda a função
iam.serviceAccountTokenCreator
à conta de serviço do Pub/Sub.Selecione a conta de serviço que criou anteriormente.
Na lista Destino do evento, selecione Fluxos de trabalho.
Na lista Selecionar um fluxo de trabalho, selecione o fluxo de trabalho callback-event-listener.
Clique em Criar.
gcloud
Para criar um acionador, execute o comando
gcloud eventarc triggers create
:
gcloud eventarc triggers create trigger-pubsub-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=topic-callback \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Os eventos são transformados e transmitidos para a execução do fluxo de trabalho como argumentos de tempo de execução. Tenha em atenção que o novo acionador pode demorar até 2 minutos a ficar ativo.
Crie um acionador do Eventarc para encaminhar eventos do Cloud Storage
Um acionador do Eventarc permite-lhe encaminhar eventos especificando filtros para o acionador, incluindo a origem do evento e o fluxo de trabalho de destino.
Crie um acionador do Eventarc para executar o fluxo de trabalho callback-event-listener
como resultado do carregamento de um ficheiro para um contentor do Cloud Storage.
Saiba mais sobre como acionar um fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Eventarc.
Clique em
Criar acionador.Escreva um Nome do acionador.
Por exemplo,
trigger-storage-events-listener
.Na lista Fornecedor de eventos, selecione Cloud Storage.
Na lista Evento, em Direto, selecione google.cloud.storage.object.v1.finalized.
Na lista Recipiente, procure o recipiente que criou anteriormente e selecione-o.
Na lista Região, com base no seu contentor do Cloud Storage, aceite o valor predefinido de us-central1 (Iowa).
Se lhe for pedido, conceda a função
iam.serviceAccountTokenCreator
à conta de serviço do Pub/Sub.Selecione a conta de serviço que criou anteriormente.
Na lista Destino do evento, selecione Fluxos de trabalho.
Na lista Selecionar um fluxo de trabalho, selecione o fluxo de trabalho callback-event-listener.
Clique em Criar.
gcloud
Para criar um acionador, execute o comando
gcloud eventarc triggers create
:
gcloud eventarc triggers create trigger-storage-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket-callback" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Os eventos são transformados e transmitidos para a execução do fluxo de trabalho como argumentos de tempo de execução. Tenha em atenção que o novo acionador pode demorar até 2 minutos a ficar ativo.
Execute o fluxo de trabalho principal
A execução de um fluxo de trabalho executa a definição do fluxo de trabalho atual associada ao
fluxo de trabalho. Execute o fluxo de trabalho callback-event-sample
. Este é o fluxo de trabalho principal e aguarda que ocorram eventos específicos, retomando a execução apenas quando o fluxo de trabalho secundário faz os pedidos de callback adequados.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Na página Fluxos de trabalho, clique no fluxo de trabalho callback-event-sample para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
A execução do fluxo de trabalho é iniciada. Enquanto a execução é realizada, deve ver um Estado de execução de
Running
e uma entrada de registo semelhante à seguinte:Started waiting 1hr for an event from source topic-callback
.
gcloud
Para executar um fluxo de trabalho, execute o comando
gcloud workflows run
:
gcloud workflows run callback-event-sample \ --location=us-central1
A execução do fluxo de trabalho é iniciada. Enquanto a execução é realizada, deve ver um estado de execução semelhante ao seguinte:
Waiting for execution [a848a164-268a-449c-b2fe-396f32f2ed66] to complete...working...
Gere eventos e verifique o estado de execução
Pode confirmar que os resultados são os esperados gerando eventos, vendo as entradas do registo e verificando o estado de execução do fluxo de trabalho.
Publicar uma mensagem
Publicar uma mensagem no tópico Pub/Sub que criou anteriormente.
Consola
Na Google Cloud consola, aceda à página Tópicos do Pub/Sub.
Clique em topic-callback.
Clique no separador Mensagens.
Clique em Publicar mensagem.
No campo Corpo da mensagem, introduza
Hello World
.Clique em Publicar.
gcloud
Para publicar uma mensagem, use o comando gcloud pubsub topics publish:
gcloud pubsub topics publish topic-callback \ --message="Hello World"
Carregue um objeto
Carregue um ficheiro para o contentor do Cloud Storage que criou anteriormente.
Consola
- Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.
Clique no nome do depósito que criou anteriormente.
No separador Objetos, faça uma das seguintes ações:
Arraste e largue o ficheiro pretendido do ambiente de trabalho ou do gestor de ficheiros para o painel principal na Google Cloud consola.
Clique em Carregar ficheiros, selecione o ficheiro que quer carregar e, de seguida, clique em Abrir.
gcloud
Para carregar um ficheiro, execute o comando gcloud storage cp
:
gcloud storage cp OBJECT_LOCATION gs://PROJECT_ID-bucket-callback/
Substitua OBJECT_LOCATION
pelo caminho local para o seu objeto. Por exemplo, random.txt
.
Veja entradas do registo e o estado de execução
Confirme que o fluxo de trabalho callback-event-sample
foi concluído com êxito.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Na página Fluxos de trabalho, clique no fluxo de trabalho callback-event-sample para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, para aceder aos detalhes de uma execução específica, clique no ID de execução adequado.
O Estado de execução deve ser Succeeded e, no painel Output, deve ver os eventos do Pub/Sub e do Cloud Storage recebidos.
gcloud
Filtre as entradas do registo e devolva o resultado no formato JSON:
gcloud logging read "resource.type=workflows.googleapis.com/Workflow AND textPayload:calling OR textPayload:waiting" \ --format=json
Procure entradas de registo semelhantes a:
"textPayload": "Stopped waiting for an event from source..." "textPayload": "Calling back url https://workflowexecutions.googleapis.com/v1/projects/..." "textPayload": "Started waiting 1hr for an event from source..."
Verifique o estado da última tentativa de execução:
gcloud workflows executions wait-last
O resultado deve ser semelhante ao seguinte:
Using cached execution name: projects/1085953646031/locations/us-central1/workflows/callback-event-sample/executions/79929e4e-82c1-4da1-b068-f828034c01b7 Waiting for execution [79929e4e-82c1-4da1-b068-f828034c01b7] to complete...done. [...] state: SUCCEEDED