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 ver 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 comandos gcloud pubsub ou o Console do GCP.

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ê tiver configurado o PUBSUB_EMULATOR_HOST conforme descrito em Como configurar 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 este exemplo, siga as instruções de configuração do Java 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 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 problemas, 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