Como receber eventos do Pub/Sub

Saiba como implantar um serviço no Cloud Run para Anthos no Google Cloud e criar e enviar eventos para esse serviço a partir do Pub/Sub.

Antes de começar

Para concluir esta tarefa, você precisa ter um agente de eventos e saber o namespace em que ele está sendo executado. Saiba como configurar eventos no Cloud Run for Anthos e criar um agente de eventos.

Se você tiver um agente de eventos ativo, execute o comando a seguir para ver o namespace do Kubernetes:

kubectl get brokers -n NAMESPACE

Como implantar um serviço receptor de eventos do Cloud Run for Anthos

Implantar um serviço do Cloud Run for Anthos que recebe eventos do agente de eventos.

Para implantar o serviço Cloud Run for Anthos:

  1. Para clonar o repositório:

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/pubsub
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/pubsub
    

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/pubsub
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/pubsub
    

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/pubsub
    
  2. Crie o contêiner e faça upload dele para o Cloud Build:

    gcloud builds submit \
      --tag gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_FILENAME
    

    em que CLOUD_RUN_CONTAINER_FILENAME é o nome de arquivo do contêiner.

  3. Para implantar a imagem de contêiner no Cloud Run for Anthos:

    gcloud run deploy CLOUD_RUN_SERVICE_NAME \
        --namespace=NAMESPACE \
        --image gcr.io/$(gcloud config get-value project)/CLOUD_RUN_CONTAINER_NAME
    

    em que NAMESPACE é o mesmo namespace do agente de eventos.

Quando o URL do serviço aparecer, significa que ele foi implantado corretamente.

Como criar um gatilho para o Pub/Sub

  1. Crie um tópico do Pub/Sub:

    gcloud pubsub topics create TOPIC_NAME
    
  2. Crie um gatilho com --parameters topic=TOPIC_NAME e --target-service=CLOUD_RUN_SERVICE_NAME:

    gcloud beta events triggers create TRIGGER_NAME \
      --namespace NAMESPACE \
      --target-service=CLOUD_RUN_SERVICE_NAME \
      --type=google.cloud.pubsub.topic.v1.messagePublished \
      --source=CloudPubSubSource \
      --parameters topic=TOPIC_NAME
    

    em que NAMESPACE é o mesmo namespace do agente de eventos, TOPIC-NAME é o nome do tópico do Pub/Sub que você criou e CLOUD_RUN_SERVICE_NAME é o nome do serviço receptor de evento no Cloud Run for Anthos.

  3. Opcional Verifique se o gatilho está operacional usando a ferramenta de linha de comando gcloud:

    gcloud beta events triggers list \
      --target-service 'CLOUD_RUN_SERVICE_NAME' \
      --namespace NAMESPACE
    

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

    A resposta será semelhante a:

    TRIGGER         EVENT TYPE                                      TARGET
    trigger-name    google.cloud.pubsub.topic.v1.messagePublished   cloud-run-service
    

Como gerar um evento

  1. Publique uma mensagem no tópico do Pub/Sub:

    gcloud pubsub topics publish TOPIC_NAME \
      --message "World"
    
  2. Verifique o evento publicado observando os registros do serviço de recebimento do Cloud Run para Anthos:

    kubectl logs \
      --selector serving.knative.dev/service=CLOUD_RUN_SERVICE_NAME \
      -c user-container \
      -n NAMESPACE \
      --tail=100
    

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.

    Nos registros, você encontrará uma entrada semelhante a esta:

    Hello World! ID: 961750303502725
    

Limpeza

Exclua os recursos criados neste tutorial para evitar cobranças recorrentes.

  1. Exclua o gatilho e digite:

    gcloud beta events triggers delete TRIGGER-NAME \
        --namespace NAMESPACE
    

    em que NAMESPACE é o mesmo namespace que seu agente de eventos.