Como testar aplicativos localmente com o emulador

Para desenvolver e testar seu aplicativo localmente, use o emulador do Cloud Pub/Sub, que fornece emulação local do ambiente de produção do Cloud Pub/Sub. Você executa o emulador do Cloud Pub/Sub usando a ferramenta de linha de comando gcloud.

Para executar seu aplicativo no emulador, primeiro faça algumas configurações, como iniciar o emulador e configurar as variáveis de ambiente.

Pré-requisitos

É necessário ter os itens a seguir para usar o emulador do Cloud Pub/Sub:

  • Ambiente de desenvolvimento do Python devidamente configurado. Consulte este guia para ver detalhes.

  • Java JRE (versão 7 ou posterior) instalado.

  • O Google Cloud SDK instalado. O Cloud SDK contém a ferramenta de linha de comando gcloud.

  • Um aplicativo criado com as Bibliotecas cliente do Google Cloud.

Como instalar o emulador

Instale o emulador no prompt de comando:

gcloud components install pubsub-emulator
gcloud components update

Como iniciar o emulador

Para iniciar o emulador, chame pubsub start em um prompt de comando:

gcloud beta emulators pubsub start [options]

em que [options] são os argumentos de linha de comando fornecidos pela ferramenta de linha de comando gcloud. Consulte gcloud beta emulators pubsub start para uma lista completa de opções.

Depois de iniciar o emulador, será exibida uma mensagem semelhante a esta:

...
[pubsub] This is the Cloud Pub/Sub fake.
[pubsub] Implementation may be incomplete or differ from the real system.
...
[pubsub] INFO: Server started, listening on 8085

Para testar assinaturas de push, use um endpoint de push local válido que seja capaz de manipular solicitações HTTP POST. Por exemplo, use o servidor JSON para iniciar um servidor falso de API REST em http://localhost:3000 com http://localhost:3000/receive_messages como recurso.

Como configurar variáveis de ambiente

Depois de iniciar o emulador, você precisa definir variáveis de ambiente para que seu aplicativo se conecte ao emulador em vez do Cloud Pub/Sub. Faça isso na mesma máquina usada na execução do seu aplicativo.

É necessário configurar as variáveis de ambiente sempre que iniciar o emulador. Elas dependem de números de portas dinamicamente atribuídas que podem ser alteradas durante a reinicialização do emulador.

Como configurar automaticamente as variáveis

Se o aplicativo e o emulador forem executados na mesma máquina, defina as variáveis de ambiente automaticamente:

Linux/macOS

Execute env-init usando a substituição de comando:

$(gcloud beta emulators pubsub env-init)

Windows

Crie e execute um arquivo de lote usando a saída de env-init:

gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd

Seu aplicativo agora será conectado ao emulador do Cloud Pub/Sub.

Como configurar manualmente as variáveis

Se o aplicativo e o emulador forem executados em máquinas diferentes, configure as variáveis de ambiente manualmente:

  1. Execute o comando env-init:

     gcloud beta emulators pubsub env-init

  2. Na máquina que executa o aplicativo, defina o valor e a variável de ambiente PUBSUB_EMULATOR_HOST de acordo com a direção da saída do comando env-init. Também é possível definir a variável de ambiente PUBSUB_PROJECT_ID referente ao projeto que quer usar para o emulador, mas só precisa configurar PUBSUB_EMULATOR_HOST para que o aplicativo se conecte ao emulador. Por exemplo:

    Linux/macOS
    export PUBSUB_EMULATOR_HOST=localhost:8432
    export PUBSUB_PROJECT_ID=my-project-id
    Windows
    set PUBSUB_EMULATOR_HOST=localhost:8432
    set PUBSUB_PROJECT_ID=my-project-id

Seu aplicativo agora será conectado ao emulador do Cloud Pub/Sub.

Observação: para usar o servidor de desenvolvimento local do Python App Engine Standard, passe as variáveis de ambiente para a linha de comando da seguinte forma:

Python

dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}

Como usar o emulador

Para usar o emulador, você precisa ter um aplicativo criado com as bibliotecas de cliente do Google Cloud. O emulador não é compatível com o Console do GCP ou com comandos gcloud pubsub.

No exemplo a seguir, demonstramos como criar um tópico, publicar mensagens e ler mensagens com o emulador e um aplicativo que usa a biblioteca de cliente do Google Cloud para Python.

Conclua as seguintes etapas no computador em que as variáveis de ambiente do emulador foram configuradas:

  1. Faça o download das amostras do Cloud Pub/Sub para Python no GitHub. Para isso, clone o repositório inteiro do Python. As amostras do Cloud Pub/Sub estão no diretório pubsub.

  2. No seu repositório clonado, navegue até pubsub/cloud-client. Você concluirá o restante das etapas nesse diretório.

  3. De dentro do diretório pubsub/cloud-client, instale as dependências necessárias para executar o exemplo:

    pip install -r requirements.txt
    
  4. Crie um tópico:

    python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
    
  5. Crie uma assinatura para o tópico:

    • Crie uma assinatura de pull:
    python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
    
    • Para assinaturas de push, configure um endpoint como recurso no servidor local. Isso pode servir como valor válido para PUSH_ENDPOINT. Por exemplo, http://localhost:3000/receive_messages. Em seguida, crie a assinatura de push:
    python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID
    PUSH_ENDPOINT
    
  6. Publique mensagens no tópico:

    python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
    
  7. Leia as mensagens publicadas no tópico:

    python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
    

Como acessar as variáveis de ambiente

Em todas as linguagens, exceto Java e C#, se você configurar PUBSUB_EMULATOR_HOST conforme descrito em Como definir variáveis de ambiente, as bibliotecas de cliente do Cloud Pub/Sub chamarão automaticamente a API em execução na instância local em vez do Cloud Pub/Sub.

No entanto, é preciso modificar seu código para usar o emulador nas bibliotecas cliente C# e Java:

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud Pub/Sub: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud Pub/Sub para C#.

// Copyright 2017 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

using Google.Apis.Logging;
using Google.Cloud.PubSub.V1;
using Google.Cloud.Translation.V2;
using static Google.Apis.Http.ConfigurableMessageHandler;
using Grpc.Core;
using System;
using Google.Api.Gax.ResourceNames;

namespace Google.Cloud.Tools.Snippets
{
    public class FaqSnippets
    {
        public void Emulator()
        {
            // Sample: Emulator
            // For example, "localhost:8615"
            string emulatorHostAndPort = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");

            Channel channel = new Channel(emulatorHostAndPort, ChannelCredentials.Insecure);
            PublisherServiceApiClient client = PublisherServiceApiClient.Create(channel);
            client.CreateTopic(new TopicName("project", "topic"));
            foreach (var topic in client.ListTopics(new ProjectName("project")))
            {
                Console.WriteLine(topic.Name);
            }
            // End sample
        }

        public void RestLogging()
        {
            // Sample: RestLogging
            // Required using directives:
            // using static Google.Apis.Http.ConfigurableMessageHandler;
            // using Google.Apis.Logging;
            // using Google.Cloud.Translation.V2;

            // Register a verbose console logger
            ApplicationContext.RegisterLogger(new ConsoleLogger(LogLevel.All));

            // Create a translation client
            TranslationClient client = TranslationClient.Create();

            // Configure which events the message handler will log.
            client.Service.HttpClient.MessageHandler.LogEvents =
                LogEventType.RequestHeaders | LogEventType.ResponseBody;

            // Make the request
            client.ListLanguages();
            // End sample
        }
    }
}

Java

Antes de testar essa amostra, siga as instruções de configuração do Java no guia de início rápido do Cloud Pub/Sub usando bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud Pub/Sub para Java.

String hostport = System.getenv("PUBSUB_EMULATOR_HOST");
ManagedChannel channel = ManagedChannelBuilder.forTarget(hostport).usePlaintext().build();
try {
  TransportChannelProvider channelProvider =
      FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
  CredentialsProvider credentialsProvider = NoCredentialsProvider.create();

  // Set the channel and credentials provider when creating a `TopicAdminClient`.
  // Similarly for SubscriptionAdminClient
  TopicAdminClient topicClient =
      TopicAdminClient.create(
          TopicAdminSettings.newBuilder()
              .setTransportChannelProvider(channelProvider)
              .setCredentialsProvider(credentialsProvider)
              .build());

  ProjectTopicName topicName = ProjectTopicName.of("my-project-id", "my-topic-id");
  // Set the channel and credentials provider when creating a `Publisher`.
  // Similarly for Subscriber
  Publisher publisher =
      Publisher.newBuilder(topicName)
          .setChannelProvider(channelProvider)
          .setCredentialsProvider(credentialsProvider)
          .build();
} finally {
  channel.shutdown();
}

Como interromper o emulador

Para interromper o emulador, pressione as teclas Ctrl+C.

Depois de interromper o emulador, execute o seguinte comando para remover a variável de ambiente do PUBSUB_EMULATOR_HOST para que seu aplicativo se conecte ao Cloud Pub/Sub:

Linux/macOS
unset PUBSUB_EMULATOR_HOST
Windows
set PUBSUB_EMULATOR_HOST=

Argumentos de linha de comando do emulador

Para mais detalhes sobre os argumentos da linha de comando do emulador do Cloud Pub/Sub, veja gcloud beta emulators pubsub.

Limitações conhecidas

  • Não é possível iniciar nem parar o Editor ou o Assinante a partir do código usado por você.
  • As operações de IAM não são compatíveis.

Para registrar um problema, acesse o fórum do Cloud Pub/Sub.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Pub/Sub