En este lab, desarrollarás un servicio de backend para una aplicación Quiz en línea con el fin de procesar los comentarios de usuarios y guardar puntuaciones.
La aplicación Quiz tiene dos partes: la aplicación web que se ejecutará en la primera ventana de Cloud Shell y la aplicación trabajadora que se ejecutará en la segunda ventana de Cloud Shell.
Aplicación web: Administra la lógica del envío de comentarios del usuario a un tema de Pub/Sub.
Aplicación trabajadora: Escucha los comentarios proporcionados por el usuario para realizar un análisis de opiniones y almacenarlos en una base de datos (Cloud Spanner).
Este proceso aprovecha los productos y servicios de Google Cloud:
Cloud Pub/Sub: El tema alerta y proporciona la aplicación trabajadora suscrita a nuevas puntuaciones y comentarios para su análisis.
Cloud Natural Language: Proporciona análisis de opiniones sobre los comentarios.
Cloud Spanner: Es la base de datos de la aplicación Quiz.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
Crear y publicar mensajes en un tema de Cloud Pub/Sub
Suscribirte al tema para recibir mensajes en una aplicación trabajadora separada
Realizar análisis de opiniones sobre los comentarios
Crear una instancia y un esquema de base de datos de Cloud Spanner, para luego agregar información a la base de datos
Configuración y requisitos
En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Accede a Qwiklabs desde una ventana de incógnito.
Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
Si usa otras credenciales, se generarán errores o incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación.
Activa Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
Puedes solicitar el nombre de la cuenta activa con este comando:
En esta sección, accederás a Cloud Shell, clonarás el repositorio de Git que contiene la aplicación Quiz, configurarás las variables de entorno y ejecutarás la aplicación.
Clona el código fuente en Cloud Shell
Escribe el siguiente comando para clonar el repositorio de la clase:
La aplicación está en ejecución cuando se ve un resultado similar al siguiente:
20:55:20.756 [restartedMain] INFO c.g.training.appdev.QuizApplication - Started QuizApplication in 20:55:20.756
Configura la aplicación trabajadora
Haz clic en Abrir una pestaña nueva a la derecha de la pestaña de Cloud Shell para abrir una segunda ventana.
Escribe el siguiente comando para cambiar el directorio de trabajo:
cd ~/pubsub-languageapi-spanner/start
Prepara el entorno en la segunda ventana de Cloud Shell:
. prepare_worker_environment.sh
Este archivo de secuencia de comandos realiza lo siguiente:
Exporta las variables de entorno GCLOUD_PROJECT y GCLOUD_BUCKET.
Crea y configura una cuenta de servicio de Google Cloud
Imprime el ID del proyecto de Google Cloud.
Ahora, inicia la aplicación trabajadora:
mvn exec:java@worker
Revisa la aplicación Quiz
Aún en la segunda ventana de Cloud Shell, haz clic en Vista previa en la web > Vista previa en el puerto 8080 para obtener una vista previa de la aplicación Quiz.
En la barra de navegación, haz clic en Take Test.
Haz clic en Places.
Responde la pregunta.
Una vez que hayas respondido, deberías ver una pantalla final en la que puedes enviar tus comentarios.
Los participantes pueden seleccionar una calificación y escribir comentarios.
Vuelve a Cloud Shell. Presiona Ctrl+C en la primera y la segunda ventana para detener las aplicaciones web y trabajadora.
Tarea 2. Examina el código de la aplicación Quiz
En esta sección, examinarás la estructura del archivo y los archivos que influyen en la aplicación Quiz.
En este lab, visualizarás y editarás archivos. Puedes usar los editores de shell que están instalados en Cloud Shell, como nano o vim, o bien el editor de código de Cloud Shell. Este lab usa el editor de código de Cloud Shell.
Inicia el editor de Cloud Shell
En Cloud Shell, haz clic en Abrir editor.
Revisa la estructura del código de la aplicación de Google Cloud
Navega a la carpeta /pubsub-languageapi-spanner/start a través del panel de navegador de archivos que se encuentra en el lado izquierdo del editor.
Ahora, expande la carpeta /src/main/java/com/google/training/appdev. Todas las rutas de código de Java están relacionadas con esta carpeta.
Selecciona el archivo Feedback.java en la carpeta .../services/gcp/domain.
Este archivo contiene una clase de modelo que representa los comentarios enviados por las personas que realizaron el test.
Selecciona el archivo PublishService.java en la carpeta .../services/gcp/pubsub.
Este archivo contiene una clase de servicio que permite a las aplicaciones publicar mensajes de comentarios en un tema de Cloud Pub/Sub.
Selecciona el archivo LanguageService.java en la carpeta .../services/gcp/languageapi.
Este archivo contiene una clase de servicio que permite a los usuarios enviar texto a la API de AA de Cloud Natural Language para que reciba la puntuación de las opiniones de la API.
Selecciona el archivo SpannerService.java en la carpeta .../services/gcp/spanner.
Este archivo contiene una clase de servicio que permite a los usuarios guardar los comentarios y datos de las respuestas de la API de Natural Language en una instancia de base de datos de Cloud Spanner.
Revisa el código de la aplicación web y de backend
Selecciona el archivo QuizEndpoint.java en la carpeta .../api.
El controlador de los mensajes POST enviados a la ruta /api/quizzes/feedback/:quiz publica en Pub/Sub los datos de los comentarios recibidos del cliente.
Selecciona el archivo ConsoleApp.java en la carpeta .../backend.
Este archivo se ejecuta como una aplicación de la consola independiente que consume los mensajes entregados a una suscripción de Pub/Sub.
Tarea 3: Trabaja con Cloud Pub/Sub
La aplicación Quiz usa una función de Pub/Sub para recuperar las respuestas y los comentarios que ingresa un usuario mediante la interfaz de cuestionarios.
En esta sección, crearás un tema y una suscripción de Cloud Pub/Sub en tu proyecto de Google Cloud y, luego, publicarás un mensaje y lo recuperarás.
Crea un tema de Cloud Pub/Sub
En la consola, haz clic en Menú de navegación > Pub/Sub > Topics y, luego, en Crear un tema.
Establece el ID del tema como feedback y, luego, haz clic en CREAR UN TEMA.
La vista Detalles del tema abre lo siguiente:
Crea una suscripción a Cloud Pub/Sub
Regresa a la segunda ventana de Cloud Shell.
Escribe el siguiente comando para crear una suscripción de Cloud Pub/Sub llamada cloud-shell-subscription en el tema feedback:
gcloud pubsub subscriptions create cloud-shell-subscription --topic feedback
Nota: Si recibes un mensaje de error que dice que la cuenta activa no tiene credenciales válidas, espera un momento y vuelve a intentar con el comando.
Publica un mensaje en un tema de Cloud Pub/Sub
En la segunda ventana de Cloud Shell, publica el mensaje "Hello World" en el tema feedback:
Tarea 4: Publica mensajes en Cloud Pub/Sub de manera programática
En esta sección, escribirás código para publicar mensajes en Cloud Pub/Sub.
Nota: Actualiza el código dentro de las secciones marcadas de la siguiente manera:
// TODO
// END TODO
Para maximizar tu aprendizaje, revisa el código, los comentarios intercalados y la documentación de la API relacionada.
Publica un mensaje de Pub/Sub
En el editor de código, abre el archivo .../services/gcp/pubsub/PublishService.java.
Actualízalo agregando el código como se indica.
Declara dos cadenas finales estáticas para PROJECT_ID y 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
Pasa al método publishFeedback(…) y crea un objeto TopicName con las cadenas PROJECT_ID y TOPIC_NAME.
El topic name hace referencia al tema de Cloud Pub/Sub que acabas de crear:
// TODO: Create a TopicName object
// for the feedback topic in the project
TopicName topicName = TopicName.of(PROJECT_ID, TOPIC_NAME);
// END TODO
Declara un objeto Publisher y configúralo como null:
// TODO: Declare a publisher for the topic
Publisher publisher = null;
// END TODO
Se inicializará en el bloque try que sigue.
Pasa al bloque try y, luego, inicializa el objeto publisher con su compilador:
// TODO: Initialize the publisher
// using a builder and the topicName
publisher = Publisher.newBuilder(topicName).build();
// END TODO
Copia la cadena feedbackMessage serializada JSON en una ByteString:
// TODO: Copy the serialized message
// to a byte string
ByteString data = ByteString.copyFromUtf8(feedbackMessage);
// END TODO
Declara un objeto PubsubMessage y, luego, inicializa el mensaje con su compilador:
// TODO: Create a Pub/Sub message using a
// builder; set the message data
PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
// END TODO
Usa el publicador para publicar el mensaje y asigna el valor de muestra al objeto futuro del ID del mensaje:
// TODO: Publish the message,
// assign to the messageIdFuture
messageIdFuture = publisher.publish(pubsubMessage);
// END TODO
Pasa al bloque finally y recupera el messageId de Pub/Sub correspondiente al objeto futuro del ID del mensaje:
// TODO: Get the messageId from
// the messageIdFuture
String messageId = messageIdFuture.get();
// END TODO
Apaga el publicador para completar el código de publicación:
// TODO: Shutdown the publisher
// to free up resources
if (publisher != null) {
publisher.shutdown();
}
// END TODO
Guarda services/gcp/pubsub/PublishService.java.
Escribe el código para usar la funcionalidad de publicación de Pub/Sub
En el archivo …/api/QuizEndpoint.java, declara un nuevo campo PublishService llamado publishService.
Aplica la anotación Spring @Autowired:
// TODO: Declare the publishService
@Autowired
private PublishService publishService;
// END TODO
En el método processFeedback(…) que controla las solicitudes POST a la ruta '/feedback/:quiz', invoca el método publishService.publishFeedback(feedback):
// TODO: Publish the feedback to Pub/Sub
publishService.publishFeedback(feedback);
// END TODO
Guarda /api/QuizEndpoint.java.
Ejecuta la aplicación y crea un mensaje de Pub/Sub
En la primera ventana de Cloud Shell, reinicia la aplicación web (si se está ejecutando, detenla y vuelve a iniciarla):
mvn spring-boot:run
Obtén una vista previa de la aplicación web y haz clic en Take Test > Places.
Responde la pregunta, selecciona la calificación, ingresa texto para el comentario y haz clic en Send Feedback.
En la segunda ventana de Cloud Shell, para extraer un mensaje de cloud-shell-subscription, escribe lo siguiente:
Tarea 5. Cómo suscribirse a los temas de Cloud Pub/Sub de manera programática
En esta sección, escribirás el código para crear una suscripción y recibir notificaciones de mensajes sobre un tema de Cloud Sub/Pub en la aplicación trabajadora.
Escribe código para crear una suscripción de Cloud Pub/Sub y recibir mensajes
En el editor de código, abre el archivo ...backend/ConsoleApp.java.
Actualízalo agregando el código como se indica.
Omite los bloques TODO para languageService y spannerService. Volverás por estos más adelante.
En el método main(), crea un objeto SubscriptionName que represente una suscripción nueva llamada "worker1-subscription":
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker1-subscription");
// END TODO
Crea un objeto SubscriptionAdminClient con un bloque try:
Nota: También en el bloque try, usa el cliente de administrador de suscripción para crear una suscripción nueva en el tema feedback.
No olvides la llave de cierre.
```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
```
Pasa al código que crea un MessageReceiver y, en la anulación receiveMessage(…), extrae los datos del mensaje en una Cadena:
// TODO: Extract the message data as a JSON String
String fb = message.getData().toStringUtf8();
// END TODO
Usa el consumidor para reconocer el mensaje:
// TODO: Ack the message
consumer.ack();
// END TODO
Después del código que inicializa un ObjectMapper, deserializa los datos del mensaje de la cadena JSON en un objeto 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
Después del bloque que crea el MessageReceiver, declara un Subscriber y, luego, inicialízalo como nulo.
Omite algunos bloques TODO y busca el siguiente:
// TODO: Declare a subscriber
Subscriber subscriber = null;
// END TODO
Desplázate al bloque try y, luego, inicializa el Subscriber con tu compilador predeterminado. Esto requiere la suscripción y el receptor:
// TODO: Initialize the subscriber using
// its default builder
// with a subscription and receiver
subscriber = Subscriber.newBuilder(
subscription, receiver).build();
// END TODO
Agrega un objeto de escucha al suscriptor para mostrar los errores:
// 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
Inicia el suscriptor:
// TODO: Start subscribing
subscriber.startAsync().awaitRunning();
// END TODO
Pasa al bloque final. Escribe el código para detener el suscriptor y borra la suscripción:
// 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
Guarda backend/ConsoleApp.java.
Ejecuta la aplicación web y trabajadora y, luego, crea un mensaje de Pub/Sub
En la primera ventana de Cloud Shell, detén y, luego, inicia la aplicación web:
mvn spring-boot:run
En la segunda ventana de Cloud Shell, inicia la aplicación trabajadora:
mvn compile exec:java@worker
En Cloud Shell, haz clic en Vista previa en la Web > Vista previa en el puerto 8080 para obtener una vista previa de la aplicación Quiz.
Haz clic en Take Test.
Haz clic en Places.
Responde la pregunta, selecciona la calificación, ingresa texto para el comentario y, luego, haz clic en Send Feedback.
Regresa a la segunda ventana de Cloud Shell.
La aplicación trabajadora debería haber recibido el mensaje del comentario a través de su controlador y debería mostrarlo en la segunda ventana de Cloud Shell. El siguiente es un ejemplo de un mensaje de comentario:
Feedback received: Feedback{email='app.dev.student@dummy.org', quiz='places', feedback='love the test', rating=5, timestamp=1527564677609, sentimentScore=0.0}
Nota: Puedes ignorar el resultado WARNING de forma segura en relación con una operación de acceso reflectante ilegal.
Detén las aplicaciones web y de consola.
Tarea 6. Usa la API de Cloud Natural Language
En esta sección, escribirás el código para realizar un análisis de opiniones sobre el texto del comentario enviado por el usuario. Para obtener más información consulta API de Google Cloud Natural Language.
Escribe código para invocar la API de Cloud Natural Language
Regresa al editor y abre el archivo LanguageService.java en la carpeta services/gcp/languageapi.
Desplázate al método analyzeSentiment(…) y crea un objeto LanguageServiceClient en un bloque try.
En este paso, ten en cuenta que no hay un // END TODO en el contenido que copias en el archivo:
// TODO: Create the LanguageServiceClient object
try (LanguageServiceClient language =
LanguageServiceClient.create()) {
Crea un objeto Document nuevo con su compilador y configura este objeto con el contenido y tipo del 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
Usa el objeto cliente de Natural Language para analizar las opiniones del documento y asigna el resultado a un objeto Sentiment:
// TODO: Use the client to analyze
// the sentiment of the feedback
Sentiment sentiment = language
.analyzeSentiment(doc)
.getDocumentSentiment();
// END TODO
Luego, muestra la puntuación de las opiniones desde el objeto sentiment:
// TODO: Return the sentiment score
return sentiment.getScore();
// END TODO
}
No olvides la llave de cierre.
Guarda el archivo.
Escribe código para usar la funcionalidad de la API de Natural Language
Vuelve al archivo backend/ConsoleApp.java.
Cambia al método main(…).
En el método main(), crea un objeto SubscriptionName que represente una suscripción nueva llamada "worker2-subscription".
Esto reemplaza a la "worker1-subscription".
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker2-subscription");
// END TODO
En el punto indicado por los comentarios, crea la instancia LanguageService con su método estático create():
// TODO: Create the languageService
LanguageService languageService = LanguageService.create();
// END TODO
En el punto indicado por los comentarios, usa el objeto languageService para realizar la detección de opiniones en feedback:
// TODO: Use the Natural Language API to analyze sentiment
float sentimentScore = languageService.analyzeSentiment(
feedback.getFeedback());
// END TODO
Luego, registra la puntuación en la consola y asigna una propiedad de puntuación nueva al objeto feedback:
// TODO: Set the feedback object sentiment score
feedback.setSentimentScore(sentimentScore);
System.out.println("Score is: " + sentimentScore);
// END TODO
Guarda el archivo.
Ejecuta las aplicaciones web y trabajadora, y prueba la API de Natural Language
Regresa a la primera ventana de Cloud Shell y reinicia la aplicación web.
Cambia a la segunda ventana de Cloud Shell y reinicia la aplicación trabajadora.
Obtén una vista previa de la aplicación web y, luego, haz clic en Take Test > Places.
Responde las preguntas, selecciona la calificación, ingresa texto para el comentario y haz clic en Send Feedback.
Regresa a la segunda ventana de Cloud Shell.
En el resultado, se muestra la aplicación trabajadora invocada por la API de Cloud Natural Language y la puntuación de opiniones en la consola junto a Score is:.
Por ejemplo:
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
Detén las aplicaciones web y trabajadora.
Tarea 7. Conserva los datos en Cloud Spanner
En esta sección, crearás una instancia, una base de datos y una tabla de Cloud Spanner. Luego, escribirás el código para conservar los datos de los comentarios en la base de datos.
Crea una instancia de Cloud Spanner
Regresa a la consola de Cloud.
Haz clic en el menú de navegación > Spanner.
Haz clic en CREAR INSTANCIA.
Establece el Nombre de la instancia de quiz-instance.
En la sección Elige una configuración, selecciona us-central1 del menú desplegable Selecciona una configuración.
Haz clic en Crear.
Crea una base de datos y una tabla de Cloud Spanner
En la página Detalles de la instancia de quiz-instance, haz clic en CREAR BASE DE DATOS.
Para el Nombre de la base de datos, escribe quiz-database.
En Define your schema, en el cuadro de texto, escribe la siguiente instrucción de SQL:
Escribe código para conservar datos en Cloud Spanner
Nota: Obtén más información sobre las APIs de Cloud Spanner en APIs y referencia.
Si deseas obtener información sobre las APIs específicas que se usaron en esta sección, en el panel izquierdo de la página de APIs y referencia, en la sección APIs y referencia, haz clic en Bibliotecas cliente > Referencia de Java.
Regresa al editor de código y pasa al método insertFeedback(…) en el archivo …services/gcp/spanner/SpannerService.java.
Obtén una referencia a Cloud Spanner:
// TODO: Get a reference to the Spanner API
SpannerOptions options =
SpannerOptions.newBuilder().build();
Spanner spanner = options.getService();
// END TODO
Obtén una referencia a la base de datos de Spanner a través del ID de la base de datos:
// TODO: Get a reference to the quiz-instance
// and its quiz-database
DatabaseId db = DatabaseId.of(
options.getProjectId(),
"quiz-instance",
"quiz-database");
// END TODO
Obtén una referencia al cliente de la base de datos de Cloud Spanner:
// TODO: Get a client for the quiz-database
DatabaseClient dbClient =
spanner.getDatabaseClient(db);
// END TODO
Crea una List<Mutation> nueva para hacer referencia a todos los cambios que se harán en la base de datos:
// TODO: Create a list to hold mutations
// against the database
List<Mutation> mutations = new ArrayList<>();
// END TODO
// END TODO
Agrega el Mutation que representa un insert en la tabla de feedback. Para ello, usa los datos del objeto 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
Usa el cliente de base de datos para escribir las mutaciones:
// TODO: Write the change to Spanner
dbClient.write(mutations);
// END TODO
Guarda el archivo.
Escribe código para usar la funcionalidad de Cloud Spanner
Regresa al método main(...) en el archivo backend/ConsoleApp.java.
En el método main(), crea un objeto SubscriptionName que represente una nueva suscripción llamada "worker3-subscription".
Esto reemplaza a la "worker2-subscription":
// TODO: Create the Pub/Sub subscription name
ProjectSubscriptionName subscription =
ProjectSubscriptionName.of(projectId,
"worker3-subscription");
// END TODO
En el punto indicado por los comentarios, crea la instancia SpannerService:
// TODO: Create the spannerService
SpannerService spannerService = SpannerService.create();
// END TODO
En el punto indicado por los comentarios, usa el objeto spannerService para insertar el feedback en la base de datos y, luego, imprimir un mensaje en la consola:
// TODO: Insert the feedback into Cloud Spanner
spannerService.insertFeedback(feedback);
System.out.println("Feedback saved");
// END TODO
Guarda el archivo.
Ejecuta las aplicaciones web y trabajadora, y prueba Cloud Spanner
Regresa a la primera ventana de Cloud Shell y, luego, inicia la aplicación web.
Cambia a la segunda ventana de Cloud Shell y reinicia la aplicación trabajadora.
Obtén una vista previa de la aplicación Quiz y haz clic en Take Test > Places.
Responde las preguntas, selecciona la calificación, ingresa texto para el comentario y haz clic en Send Feedback.
Regresa a la segunda ventana de Cloud Shell.
Deberías ver que la aplicación trabajadora invocó la API de Cloud Spanner y mostró el mensaje en la ventana de la consola.
Regresa a la consola. Haz clic en el menú de navegación > Spanner.
Selecciona quiz-instance > quiz-database y haz clic en Consulta, en el panel izquierdo.
Para ejecutar una consulta, en el diálogo Consulta, escribe SELECT * FROM Feedback y haz clic en Ejecutar.
SELECT * FROM Feedback
Deberías ver el nuevo registro de comentarios en la base de datos de Cloud Spanner, incluidos los datos del mensaje de Cloud Pub/Sub y la puntuación de Quiz de la API de Cloud Natural Language.
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
1 estrella = Muy insatisfecho
2 estrellas = Insatisfecho
3 estrellas = Neutral
4 estrellas = Satisfecho
5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así
evitarás cualquier conflicto entre tu cuenta personal y la cuenta
de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
En este lab, mejorarás la aplicación Quiz en línea desarrollando un servicio de backend para procesar comentarios de los usuarios y guardar puntuaciones.
Duración:
0 min de configuración
·
Acceso por 120 min
·
120 min para completar