Instruções e requisitos de configuração do laboratório
Proteja sua conta e seu progresso. Sempre use uma janela anônima do navegador e suas credenciais para realizar este laboratório.

Desenvolvimento de aplicativos. Como desenvolver um serviço de back-end: Java

Laboratório 2 horas universal_currency_alt 5 créditos show_chart Avançado
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Este conteúdo ainda não foi otimizado para dispositivos móveis.
Para aproveitar a melhor experiência, acesse nosso site em um computador desktop usando o link enviado a você por e-mail.

Informações gerais

Neste laboratório, você desenvolverá um serviço de back-end para um aplicativo de teste on-line para processar o feedback dos usuários e salvar as pontuações.

O aplicativo de teste tem duas partes: o aplicativo da Web que será executado na primeira janela do Cloud Shell e o aplicativo do worker, executado na segunda janela do Cloud Shell.

  • Aplicativo da Web: gerencia a lógica de enviar o feedback do usuário para um tópico do Pub/Sub.
  • Aplicativo do worker: interpreta o feedback fornecido pelo usuário para depois executar a análise de sentimento e armazená-la em um banco de dados (Cloud Spanner).

Esse processo usa os produtos e os serviços do Google Cloud Platform (GCP):

  • Cloud Pub/Sub: o tópico alerta o aplicativo do worker e fornece a ele novas pontuações e feedback para análise.
  • Cloud Natural Language: fornece análise de sentimento no feedback.
  • Cloud Spanner: banco de dados para o aplicativo de teste.

Objetivos

Neste laboratório, você aprenderá a fazer o seguinte:

  • Criar e publicar mensagens em um tópico do Cloud Pub/Sub
  • Inscrever-se no tópico para receber mensagens em um aplicativo do worker separado
  • Fazer análises de sentimento no feedback
  • Criar uma instância e um esquema de banco de dados do Cloud Spanner e inserir dados nesse banco

Configuração e requisitos

Para cada laboratório, você recebe um novo projeto do Google Cloud e um conjunto de recursos por um determinado período e sem custos financeiros.

  1. Faça login no Qwiklabs em uma janela anônima.

  2. Confira o tempo de acesso do laboratório (por exemplo, 1:15:00) e finalize todas as atividades nesse prazo.
    Não é possível pausar o laboratório. Você pode reiniciar o desafio, mas vai precisar refazer todas as etapas.

  3. Quando tudo estiver pronto, clique em Começar o laboratório.

  4. Anote as credenciais (Nome de usuário e Senha). É com elas que você vai fazer login no Console do Google Cloud.

  5. Clique em Abrir Console do Google.

  6. Clique em Usar outra conta, depois copie e cole as credenciais deste laboratório nos locais indicados.
    Se você usar outras credenciais, vai receber mensagens de erro ou cobranças.

  7. Aceite os termos e pule a página de recursos de recuperação.

Ative o Google Cloud Shell

O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.

O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.

  1. No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

    Ícone do Cloud Shell em destaque

  2. Clique em Continuar.

O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

ID do projeto em destaque no terminal do Cloud Shell

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.

  • Para listar o nome da conta ativa, use este comando:
gcloud auth list

Saída:

Credentialed accounts: - @.com (active)

Exemplo de saída:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • Para listar o ID do projeto, use este comando:
gcloud config list project

Saída:

[core] project =

Exemplo de saída:

[core] project = qwiklabs-gcp-44776a13dea667a6 Observação: a documentação completa da gcloud está disponível no guia com informações gerais sobre a gcloud CLI .

Tarefa 1. Preparar o aplicativo de teste

Nesta seção, você acessará o Cloud Shell, clonará o repositório git que contém o aplicativo de teste, definirá as variáveis de ambiente e executará o aplicativo.

Clone o código-fonte no Cloud Shell

  1. Digite o comando a seguir para clonar o repositório para o curso:
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
  1. Crie um link flexível para seu diretório de trabalho:
ln -s ~/training-data-analyst/courses/developingapps/v1.3/java/pubsub-languageapi-spanner ~/pubsub-languageapi-spanner

Configure o aplicativo da Web

Nesta seção, você vai definir as dependências e executar o aplicativo da Web.

  1. Acesse o diretório que contém os arquivos de amostra deste laboratório:

    cd ~/pubsub-languageapi-spanner/start
  2. Configure o aplicativo da Web:

    . prepare_web_environment.sh

    Esse arquivo de script faz o seguinte:

    • Cria um aplicativo do App Engine
    • Exporta as variáveis de ambiente: GCLOUD_PROJECT e GCLOUD_BUCKET.
    • Executa o mvn clean install.
    • Cria entidades no Cloud Datastore.
    • Imprime o código do projeto do GCP.

    Você pode executar este aplicativo quando aparecer uma resposta semelhante a esta:

    [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.111 s [INFO] Finished at: 2021-12-06T20:54:09Z [INFO] ------------------------------------------------------------------------ Project ID: qwiklabs-gcp-02-6c9b7cfe44c0
  3. Execute o aplicativo da Web:

    mvn spring-boot:run

    O aplicativo vai estar em execução quando aparecer uma resposta semelhante a esta:

    20:55:20.756 [restartedMain] INFO c.g.training.appdev.QuizApplication - Started QuizApplication in 20:55:20.756

Configure o aplicativo do worker

  1. Clique em Abrir uma nova guia à direita da guia do Cloud Shell para abrir uma segunda janela do Cloud Shell.

  2. Digite o seguinte comando para alterar o diretório de trabalho:

    cd ~/pubsub-languageapi-spanner/start
  3. Prepare o ambiente na segunda janela do Cloud Shell:

    . prepare_worker_environment.sh

    Esse arquivo de script faz o seguinte:

    • Exporta as variáveis de ambiente GCLOUD_PROJECT e GCLOUD_BUCKET.
    • Cria e configura uma conta de serviço do GCP
    • Imprime o ID do projeto do Google Cloud Platform.
  4. Agora, inicie o aplicativo do worker:

    mvn exec:java@worker

Revise o aplicativo de teste

  1. Ainda na segunda janela do Cloud Shell, clique em Visualização na Web > Visualizar na porta 8080 para ter acesso ao aplicativo de teste.

    O menu suspenso de visualização da Web, em que a opção Visualização na porta 8080 está destacada.

  2. Na barra de navegação, clique em Take Test.

    A página de recepção do Quite Interesting Quiz, que inclui as opções "Create Question", "Take Test" e "Leaderboard".

  3. Clique em Places.

    A página "Task Test", que inclui a guia "Places" destacada.

  4. Responda à pergunta.

    Uma pergunta de teste e diversas opções, além de um botão "Submit Answer".

    Após responder à pergunta, será exibida uma tela final para enviar feedback.

    Dois campos de texto na página final do questionário com o botão "Send Feedback".

    As pessoas que responderem ao teste poderão dar uma nota e enviar feedback.

  5. Volte para o Cloud Shell. Pressione Ctrl+C nas duas janelas para interromper os aplicativos da Web e do worker.

Tarefa 2. Examinar o código do aplicativo de teste

Nesta seção, você vai examinar a estrutura de arquivos e os arquivos que afetam o aplicativo de teste.

Neste laboratório, você visualizará e editará arquivos. Você pode usar os editores de shell instalados no Cloud Shell, como nano ou vim, ou usar o editor de código do Cloud Shell. Este laboratório usa o editor de código do Cloud Shell.

Inicie o editor do Cloud Shell

  • No Cloud Shell, clique em Abrir editor.

Revise a estrutura de código do aplicativo do GCP

  1. Acesse a pasta /pubsub-languageapi-spanner/start usando o painel do navegador de arquivos no lado esquerdo do editor.

  2. Agora expanda a pasta /src/main/java/com/google/training/appdev. Todos os caminhos de código Java são relativos a essa pasta.

  3. Selecione o arquivo Feedback.java na pasta .../services/gcp/domain.

Esse arquivo contém uma classe de modelo que representa o feedback enviado pelas pessoas que fizeram o teste.

  1. Selecione o arquivo PublishService.java na pasta .../services/gcp/pubsub.

Esse arquivo contém uma classe de serviço que permite que os aplicativos publiquem mensagens de feedback em um tópico do Cloud Pub/Sub.

  1. Selecione o arquivo LanguageService.java na pasta .../services/gcp/languageapi.

Esse arquivo contém uma classe de serviço que permite que os usuários enviem texto para a API Cloud Natural Language ML e recebam a pontuação de sentimento da API.

  1. Selecione o arquivo SpannerService.java na pasta .../services/gcp/spanner.

Esse arquivo contém uma classe de serviço que permite que os usuários salvem o feedback e os dados de resposta da API Natural Language em uma instância do banco de dados do Cloud Spanner.

Revise o código do aplicativo do back-end e da Web

  1. Selecione o arquivo QuizEndpoint.java na pasta .../api.

O gerenciador de mensagens do POST enviado à rota /api/quizzes/feedback/:quiz publica no Pub/Sub os dados de feedback recebidos do cliente.

  1. Selecione o arquivo ConsoleApp.java na pasta .../backend.

Esse arquivo é executado como um aplicativo separado do console para consumir as mensagens entregues a uma assinatura do Pub/Sub.

Tarefa 3. Como trabalhar com o Cloud Pub/Sub

O aplicativo de teste usa uma função Pub/Sub para acessar respostas e feedback inseridos por um usuário pela interface do teste.

Nesta seção, você criará um tópico e uma assinatura do Cloud Pub/Sub no seu projeto do GCP. Depois, vai publicar e acessar uma mensagem.

Crie um tópico do Cloud Pub/Sub

  1. No console, clique em Menu de navegação > Pub/Sub > Tópicos e em Criar tópico.

    O caminho de navegação para a opção Tópicos.

  2. Defina o ID do tópico como feedback, e depois clique CRIAR TÓPICO.

    A página Criar um tópico, que inclui o "feedback" do ID do tópico, com os botões Criar tópico e Cancelar.

    A exibição Detalhes do tópico é aberta:

    A página de detalhes do tópico, que inclui opções como Exportar para o BigQuery e Publicar o relatório de solicitação de mensagem.

Crie uma assinatura do Cloud Pub/Sub

  1. Volte para a segunda janela do Cloud Shell.

  2. Digite o seguinte comando para criar uma assinatura do Cloud Pub/Sub chamada cloud-shell-subscription no tópico de feedback:

gcloud pubsub subscriptions create cloud-shell-subscription --topic feedback Observação: se você receber um erro avisando que a conta ativa não tem credenciais válidas, aguarde um minuto e tente o comando novamente.

Publique uma mensagem em um tópico do Cloud Pub/Sub

  • Publique uma mensagem "Hello world" no tópico de feedback na segunda janela do Cloud Shell:
gcloud pubsub topics publish feedback --message="Hello World"

Recupere uma mensagem de uma assinatura do Cloud Pub/Sub

  • Para extrair a mensagem do tópico de feedback com confirmação automática da mensagem na segunda janela do Cloud Shell:
gcloud pubsub subscriptions pull cloud-shell-subscription --auto-ack

Saída:

A saída do tópico de feedback, que inclui informações como dados, ID da mensagem e atributos.

Tarefa 4. Publique mensagens no Cloud Pub/Sub de forma programática

Nesta seção, você vai escrever o código para publicar mensagens no Cloud Pub/Sub.

Importante: atualize o código nas seções marcadas da seguinte maneira:

// TODO

// END TODO

Para maximizar seu aprendizado, revise o código, os comentários in-line e a documentação da API relacionada.

Publique uma mensagem do Pub/Sub

  1. Abra o arquivo .../services/gcp/pubsub/PublishService.java no editor de código. Atualize o arquivo adicionando o código conforme indicado.

  2. Declare duas strings estáticas finais PROJECT_ID e TOPIC_NAME:

    // TODO: Declare and initialize two Strings, // PROJECT_ID and TOPIC_NAME private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId(); private static final String TOPIC_NAME = "feedback"; // END TODO
  3. Mova para o método publishFeedback(...) e crie um objeto TopicName usando as strings PROJECT_ID e TOPIC_NAME.

    O nome do tópico faz referência ao tópico do Cloud Pub/Sub que você acabou de criar:

    // TODO: Create a TopicName object // for the feedback topic in the project TopicName topicName = TopicName.of(PROJECT_ID, TOPIC_NAME); // END TODO
  4. Declare um objeto Publisher e configure-o como null:

    // TODO: Declare a publisher for the topic Publisher publisher = null; // END TODO

    Ele será inicializado no bloco try a seguir.

  5. Vá para o bloco try e inicialize o objeto do editor usando o builder correspondente:

    // TODO: Initialize the publisher // using a builder and the topicName publisher = Publisher.newBuilder(topicName).build(); // END TODO
  6. Copie a string serializada em JSON feedbackMessage em uma ByteString:

    // TODO: Copy the serialized message // to a byte string ByteString data = ByteString.copyFromUtf8(feedbackMessage); // END TODO
  7. Declare um objeto PubsubMessage e inicialize a mensagem usando o builder correspondente:

    // TODO: Create a Pub/Sub message using a // builder; set the message data PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build(); // END TODO
  8. Use o editor para publicar a mensagem e atribua o valor de retorno para o futuro objeto do ID da mensagem:

    // TODO: Publish the message, // assign to the messageIdFuture messageIdFuture = publisher.publish(pubsubMessage); // END TODO
  9. Vá para o bloco finally e extraia "messageId" do Pub/Sub do futuro objeto do ID da mensagem:

    // TODO: Get the messageId from // the messageIdFuture String messageId = messageIdFuture.get(); // END TODO
  10. Conclua o código de publicação fechando o editor:

    // TODO: Shutdown the publisher // to free up resources if (publisher != null) { publisher.shutdown(); } // END TODO
  11. Salve services/gcp/pubsub/PublishService.java.

Escreva o código para usar a funcionalidade de publicação do Pub/Sub

  1. No arquivo .../api/QuizEndpoint.java, declare um novo campo PublishService chamado publishService.

  2. Aplique a anotação @Autowired do Spring:

    // TODO: Declare the publishService @Autowired private PublishService publishService; // END TODO
  3. No método processFeedback(...), que gerencia solicitações POST para a rota '/feedback/:quiz', invoque o método publishService.publishFeedback(feedback):

    // TODO: Publish the feedback to Pub/Sub publishService.publishFeedback(feedback); // END TODO
  4. Salve /api/QuizEndpoint.java.

Execute o aplicativo e crie uma mensagem do Pub/Sub

  1. Na primeira janela do Cloud Shell, reinicie o aplicativo da Web (se estiver em execução, interrompa-o e inicie-o):

    mvn spring-boot:run
  2. Exiba o aplicativo da Web, clique em Take Test > Places.

  3. Responda à pergunta, selecione a avaliação, digite um texto de feedback e clique em Send feedback.

  4. Na segunda janela do Cloud Shell, para receber uma mensagem do cloud-shell-subscription:

    gcloud pubsub subscriptions pull cloud-shell-subscription --auto-ack

Tarefa 5. Inscrever-se nos tópicos do Cloud Pub/Sub de forma programática

Nesta seção, você vai escrever o código para criar uma assinatura em um tópico do Cloud Pub/Sub e receber as mensagens de notificações dele no aplicativo do worker.

Escreva o código para criar uma assinatura do Cloud Pub/Sub e receber mensagens

  1. No editor de código, abra o arquivo ...backend/ConsoleApp.java.

    • Atualize o arquivo adicionando o código conforme indicado.

    • Pule os blocos TODO para languageService e spannerService. Você vai retornar para eles mais tarde.

  2. No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker1-subscription".

    // TODO: Create the Pub/Sub subscription name ProjectSubscriptionName subscription = ProjectSubscriptionName.of(projectId, "worker1-subscription"); // END TODO
  3. Crie um objeto SubscriptionAdminClient usando o bloco try:

Observação: também no bloco try, use o cliente administrador de assinaturas para criar uma nova assinatura no tópico de feedback. Não se esqueça da chave de fechamento. ```JAVA // TODO: Create the subscriptionAdminClient try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { // TODO: create the Pub/Sub subscription // using the subscription name and topic subscriptionAdminClient.createSubscription( subscription, topic, PushConfig.getDefaultInstance(), 0); // END TODO } // END TODO ```
  1. Vá para o código que cria um MessageReceiver e, na substituição receiveMessage(...), extraia os dados da mensagem para uma string:

    // TODO: Extract the message data as a JSON String String fb = message.getData().toStringUtf8(); // END TODO
  2. Use consumer para confirmar a mensagem:

    // TODO: Ack the message consumer.ack(); // END TODO
  3. Após o código que inicializa um ObjectMapper, desserialize os dados da mensagem da string JSON em um objeto de feedback:

    // TODO: Deserialize the JSON String // representing the feedback // Print out the feedback Feedback feedback = mapper.readValue( fb, Feedback.class); System.out.println("Feedback received: " + feedback); // END TODO
  4. Após o bloco que cria MessageReceiver, declare um Subscriber e inicialize-o como nulo.

    • Pule alguns blocos TODO e procure este:
    // TODO: Declare a subscriber Subscriber subscriber = null; // END TODO
  5. Vá para o bloco try e inicialize Subscriber usando o builder padrão correspondente. Você vai precisar informar a assinatura e o destinatário:

    // TODO: Initialize the subscriber using // its default builder // with a subscription and receiver subscriber = Subscriber.newBuilder( subscription, receiver).build(); // END TODO
  6. Adicione um listener ao subscriber para exibir erros:

    // TODO: Add a listener to the subscriber subscriber.addListener( new Subscriber.Listener() { @Override public void failed( Subscriber.State from, Throwable failure) { System.err.println(failure); } }, MoreExecutors.directExecutor()); // END TODO
  7. Inicie o subscriber:

    // TODO: Start subscribing subscriber.startAsync().awaitRunning(); // END TODO
  8. Vá para o bloco final. Escreva o código para interromper o subscriber e exclua a assinatura:

    // TODO: Stop subscribing if (subscriber != null) { subscriber.stopAsync().awaitTerminated(); } // END TODO // TODO: Delete the subscription try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) { subscriptionAdminClient.deleteSubscription( subscription); } // END TODO
  9. Salve backend/ConsoleApp.java.

Execute o aplicativo da Web e do worker e crie uma mensagem do Pub/Sub

  1. Na primeira janela do Cloud Shell, interrompa e inicie o aplicativo da Web:

    mvn spring-boot:run
  2. Na segunda janela do Cloud Shell, inicie o aplicativo do worker:

    mvn compile exec:java@worker
  3. No Cloud Shell, clique em Visualização na Web > Visualizar na porta 8080 para ver o aplicativo de teste.

  4. Clique em Take Test.

  5. Clique em Places.

  6. Responda à pergunta, selecione a avaliação, digite um texto de feedback e clique em Send Feedback.

  7. Volte para a segunda janela do Cloud Shell.

Você vai perceber que o aplicativo do worker recebeu a mensagem de feedback pelo gerenciador e a exibiu na segunda janela do Cloud Shell. Confira abaixo um exemplo de mensagem de feedback

Feedback received: Feedback{email='app.dev.student@dummy.org', quiz='places', feedback='love the test', rating=5, timestamp=1527564677609, sentimentScore=0.0} Observação: é possível ignorar com segurança o resultado ALERTA relacionado a Uma operação ilegal de acesso reflexivo.
  1. Interrompa os aplicativos da Web e do console.

Tarefa 6. Usar a API Cloud Natural Language

Nesta seção você vai escrever o código para executar uma análise de sentimento no texto de feedback enviado pelo usuário. Saiba mais na API Google Cloud Natural Language.

Escreva o código para invocar a API Cloud Natural Language

  1. Volte para o editor e abra o arquivo LanguageService.java na pasta services/gcp/languageapi.

  2. Vá para o método analyzeSentiment(...) e crie um objeto LanguageServiceClient em um bloco try.

    • Nesta etapa, perceba que não há um // END TODO no conteúdo copiado no arquivo:
    // TODO: Create the LanguageServiceClient object try (LanguageServiceClient language = LanguageServiceClient.create()) {
  3. Crie um novo objeto Document usando o builder dele e configure esse objeto com o conteúdo e tipo do documento:

    // TODO: Create a new Document object // using the builder // Set the content and type Document doc = Document.newBuilder() .setContent(feedback) .setType(Document.Type.PLAIN_TEXT) .build(); // END TODO
  4. Use o objeto de cliente do Natural Language para analisar o sentimento do documento, atribuindo o resultado a um objeto Sentiment:

    // TODO: Use the client to analyze // the sentiment of the feedback Sentiment sentiment = language .analyzeSentiment(doc) .getDocumentSentiment(); // END TODO
  5. Em seguida, retorne a pontuação de sentimento do objeto sentiment:

    // TODO: Return the sentiment score return sentiment.getScore(); // END TODO }

    Não se esqueça da chave de fechamento:

  6. Salve o arquivo.

Escreva o código para usar a funcionalidade da API Natural Language

  1. Volte para o arquivo backend/ConsoleApp.java.

  2. Vá para o método main(...).

  3. No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker2-subscription".

    • Isso substitui o "worker1-subscription".
    // TODO: Create the Pub/Sub subscription name ProjectSubscriptionName subscription = ProjectSubscriptionName.of(projectId, "worker2-subscription"); // END TODO
  4. No ponto indicado pelos comentários, crie a instância LanguageService usando o método estático create():

    // TODO: Create the languageService LanguageService languageService = LanguageService.create(); // END TODO
  5. No ponto indicado pelos comentários, use o objeto languageService para executar a detecção de sentimento no feedback:

    // TODO: Use the Natural Language API to analyze sentiment float sentimentScore = languageService.analyzeSentiment( feedback.getFeedback()); // END TODO
  6. Em seguida, registre a pontuação no console e atribua uma nova propriedade de pontuação ao objeto de feedback:

    // TODO: Set the feedback object sentiment score feedback.setSentimentScore(sentimentScore); System.out.println("Score is: " + sentimentScore); // END TODO
  7. Salve o arquivo.

Execute os aplicativos da Web e do worker e teste a API Natural Language

  1. Volte para a primeira janela do Cloud Shell e reinicie o aplicativo da Web.

  2. Mude para a segunda janela do Cloud Shell e reinicie o aplicativo do worker.

  3. Visualize o aplicativo da Web e clique em Take Test > Places.

  4. Responda às perguntas, selecione a avaliação, digite um texto de feedback e clique em Send feedback.

  5. Volte para a segunda janela do Cloud Shell.

    A saída mostra o aplicativo do worker que invocou a API Cloud Natural Language e exibe a pontuação de sentimento no console ao lado de A pontuação é:.

    Exemplo:

    Feedback received: Feedback{email='app.dev.student@dummy.org', quiz='places', feedback='loved the test', rating=1, timestamp=1570116062687, sentimentScore=0.0} Score is: 0.8
  6. Interrompa os aplicativos da Web e do worker.

Tarefa 7. Manter os dados no Cloud Spanner

Nesta seção, você vai criar uma instância, um banco de dados e uma tabela do Cloud Spanner. Em seguida, você escreverá o código para manter os dados do feedback no banco de dados.

Crie uma instância do Cloud Spanner

  1. Volte para o Cloud Console.
  2. Clique em Menu de navegação > Spanner.
  3. Clique em CRIAR INSTÂNCIA.
  4. Defina o nome da instância como quiz-instance.
  5. Na seção Escolher uma configuração, selecione us-central1 no menu suspenso para fazer uma seleção.
  6. Clique em Criar.

Crie um banco de dados e uma tabela do Cloud Spanner

  1. Na página Detalhes da instância de quiz-instance, clique em CRIAR BANCO DE DADOS.

  2. Em Nome do banco de dados, digite quiz-database.

  3. Em Definir seu esquema, digite na caixa de texto a seguinte instrução SQL:

    CREATE TABLE Feedback ( feedbackId STRING(100) NOT NULL, email STRING(100), quiz STRING(20), feedback STRING(MAX), rating INT64, score FLOAT64, timestamp INT64 ) PRIMARY KEY (feedbackId);

    A página Dê um nome ao banco de dados, com o código adicionado ao campo Definir seu esquema.

  4. Clique em Criar.

Escreva o código para manter os dados no Cloud Spanner

Observação: saiba mais sobre as APIs do Cloud Spanner em APIs e referência.

Para mais informações sobre as APIs específicas usadas nessa seção, no painel esquerdo da página APIs e referência, na seção de mesmo nome, clique em Biblioteca de cliente > Referência Java.
  1. Volte ao editor de código e vá para o método insertFeedback(...) no arquivo ...services/gcp/spanner/SpannerService.java.

  2. Receba uma referência para o Cloud Spanner.

    // TODO: Get a reference to the Spanner API SpannerOptions options = SpannerOptions.newBuilder().build(); Spanner spanner = options.getService(); // END TODO
  3. Receba uma referência para o banco de dados do Spanner usando o ID do banco de dados:

    // TODO: Get a reference to the quiz-instance // and its quiz-database DatabaseId db = DatabaseId.of( options.getProjectId(), "quiz-instance", "quiz-database"); // END TODO
  4. Receba uma referência para o cliente do banco de dados do Cloud Spanner:

    // TODO: Get a client for the quiz-database DatabaseClient dbClient = spanner.getDatabaseClient(db); // END TODO
  5. Adicione List<Mutation> para referenciar todas as alterações que serão feitas no banco de dados:

    // TODO: Create a list to hold mutations // against the database List<Mutation> mutations = new ArrayList<>(); // END TODO // END TODO
  6. Adicione Mutation que representa a inclusão de dados na tabela de feedback usando os dados do objeto de feedback:

    // TODO: Add an insert mutation mutations.add( // TODO: Build a new insert mutation Mutation.newInsertBuilder("Feedback") .set("feedbackId") .to(feedback.getEmail() + '_' + feedback.getQuiz() + "_" + feedback.getTimestamp()) .set("email") .to(feedback.getEmail()) .set("quiz") .to(feedback.getQuiz()) .set("feedback") .to(feedback.getFeedback()) .set("rating") .to(feedback.getRating()) .set("score") .to( feedback.getSentimentScore()) .set("timestamp") .to(feedback.getTimestamp()) .build()); // END TODO
  7. Use o cliente do banco de dados para gravar as mutações:

    // TODO: Write the change to Spanner dbClient.write(mutations); // END TODO
  8. Salve o arquivo.

Escreva o código para usar a funcionalidade do Cloud Spanner

  1. Vá para o método main(...) no arquivo backend/ConsoleApp.java.

  2. No método main(), crie um objeto SubscriptionName para representar uma nova assinatura chamada "worker3-subscription".

    • Isso substitui "worker2-subscription"
    // TODO: Create the Pub/Sub subscription name ProjectSubscriptionName subscription = ProjectSubscriptionName.of(projectId, "worker3-subscription"); // END TODO
  3. No ponto indicado pelos comentários, crie a instância SpannerService:

    // TODO: Create the spannerService SpannerService spannerService = SpannerService.create(); // END TODO
  4. No ponto indicado pelos comentários, use o objeto spannerService para inserir o feedback no banco de dados e imprimir uma mensagem no console:

    // TODO: Insert the feedback into Cloud Spanner spannerService.insertFeedback(feedback); System.out.println("Feedback saved"); // END TODO
  5. Salve o arquivo.

Execute os aplicativos da Web e do worker e teste o Cloud Spanner

  1. Volte para a primeira janela do Cloud Shell e inicie o aplicativo da Web.

  2. Mude para a segunda janela do Cloud Shell e reinicie o aplicativo do worker.

  3. Visualize o aplicativo de teste e clique em Take Test > Places.

  4. Responda às perguntas, selecione a avaliação, digite um texto de feedback e clique em Send feedback.

  5. Volte para a segunda janela do Cloud Shell.

    O aplicativo do worker terá chamado a API Cloud Spanner e exibido a mensagem na janela do console.

  6. Volte para o console. Clique em Menu de navegação > Spanner.

  7. Selecione quiz-instance > quiz-database e clique Consulta no painel à esquerda.

  8. Para executar uma consulta, na caixa de diálogo Consulta, digite SELECT * FROM Feedback e clique em Executar:

SELECT * FROM Feedback

O novo registro de feedback será exibido no banco de dados do Cloud Spanner, que vai incluir os dados da mensagem do Cloud Pub/Sub e a pontuação do teste da API Cloud Natural Language.

A página de consulta do banco de dados do questionário, com a página com a guia Resultados exibindo o feedbackID com sua pontuação, classificação e feedback.

Finalize o laboratório

Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.

Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.

O número de estrelas indica o seguinte:

  • 1 estrela = muito insatisfeito
  • 2 estrelas = insatisfeito
  • 3 estrelas = neutro
  • 4 estrelas = satisfeito
  • 5 estrelas = muito satisfeito

Feche a caixa de diálogo se não quiser enviar feedback.

Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.

Copyright 2026 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de empresas e produtos podem ser marcas registradas das empresas a que estão associados.

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

A melhor maneira de executar este laboratório é usando uma janela de navegação anônima ou privada. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.