Guía de inicio rápido: Compila un sistema Pub/Sub operativo

Introducción

En esta guía de inicio rápido, se explica cómo configurar un conjunto simple de aplicaciones que se comunican mediante el envío de mensajes a través de Pub/Sub en lugar de RPC síncronas. Si se separan las aplicaciones, sucede lo siguiente con la mensajería:

  • Hace que las aplicaciones sean más sólidas.
  • Podría simplificarse el desarrollo.

Por ejemplo, el emisor (publicador) no necesita que el destinatario (suscriptor) esté activo y disponible. Solo envía un mensaje a Pub/Sub. El publicador tampoco necesita saber cuáles y cuántas aplicaciones de suscriptor necesitan recibir el mensaje. Como resultado, se puede confiar en que el servicio entregará el mensaje a una o más aplicaciones de suscriptor cuando estén disponibles.

Esta guía de inicio rápido se diseñó para los desarrolladores de Python que usan macOS.

Requisitos:

  • Una Cuenta de Google
  • Un sistema macOS X con Python y Git instalados
  • Hasta una hora de tiempo para completar la guía

Descripción general del sistema

En esta guía de inicio rápido, debes iniciar una aplicación de publicador que envíe el mensaje “Hello, World!” a dos suscriptores, como se ilustra a continuación:

Diagrama del tema, sus suscripciones adjuntas y las aplicaciones de publicador y de suscriptor que envían mensajes a Cloud Pub/Sub, además de recibir mensajes de este servicio.

Las dos aplicaciones de suscriptor usan el mismo código, pero se las debe iniciar en diferentes momentos. Con este proceso, se demuestra cómo Pub/Sub habilita la comunicación asíncrona. Para compilar el sistema, debes hacer lo siguiente:

  1. Crear el tema de Pub/Sub y las suscripciones necesarias
  2. Crear una cuenta de servicio a fin de que las aplicaciones la usen para la autenticación
  3. Configurar los permisos de Cloud IAM
  4. Iniciar tres aplicaciones independientes: una de publicador y dos de suscriptor

Guía de inicio rápido: configuración

Configura tu proyecto de Google Cloud, y las suscripciones y el tema de Pub/Sub.

  1. Accede a Google Cloud Console.

    Ir a Google Cloud Console

    Si es la primera vez que usas Cloud, haz clic en Activar y sigue las indicaciones para configurar tu cuenta de Cloud.

    En el momento de la creación de esta guía de inicio rápido, la primera parte de la asignación mensual de datos no tiene costo. Consulta la página de precios de Pub/Sub para obtener más detalles. En esta guía de inicio rápido, también se incluyen instrucciones de limpieza.

  2. Selecciona un proyecto existente o crea uno nuevo. La primera vez que usas Google Cloud, se crea un proyecto predeterminado en tu cuenta.

    En la sección Página principal de Cloud Console, anota el ID del proyecto. Usa este valor para configurar tu proyecto actual de Cloud Storage durante el proceso de inicialización del SDK de Cloud. También debes pasar este ID a la secuencia de comandos de Python cuando inicies las aplicaciones de publicador y suscriptor.

  3. Ve a la sección Pub/Sub de Google Cloud Console.

    Ir a la sección Pub/Sub

    Sigue las indicaciones para habilitar la API.

  4. Haz clic en Crear un tema. Las aplicaciones de publicación envían mensajes a los temas. Usa hello_topic como Nombre.

  5. Haz clic en el nombre del tema y, luego, en Crear suscripción:

    1. Asigna un nombre a la suscripción sub_one. No realices ningún cambio en la configuración predeterminada. Estás creando una suscripción StreamingPull, que es un tipo de suscripción de extracción.

    2. Usa el mismo procedimiento para crear otra suscripción adjunta a hello_topic y asígnale el nombre sub_two.

      Puedes hacer clic en el nombre del tema, en la vista Temas, para ver las suscripciones nuevas o puedes cambiar a la vista Suscripciones.

Ahora tu entorno de Pub/Sub está listo para administrar el flujo de mensajes entre las aplicaciones de publicación y suscripción incluidas en esta guía de inicio rápido.

Crea credenciales de cuenta de servicio

  1. Ve a la sección Cuentas de servicio de Console.

    Ir a Cuentas de servicio de Cloud IAM

  2. Selecciona tu proyecto y haz clic en Crear cuenta de servicio.

  3. Ingresa el Nombre de la cuenta de servicio, como pubsub-quickstart.

  4. Haz clic en Crear.

  5. Para la guía de inicio rápido, la cuenta de servicio necesita permisos de publicación y suscripción. Usa el menú desplegable Selecciona una función para agregar la función Publicador de Pub/Sub.

    El cuadro de diálogo de los permisos de cuenta de servicio con la string “pub” para filtrar las funciones de Pub/Sub

  6. Haz clic en Agregar otra función y agrega Suscriptor de Pub/Sub.

    El cuadro de diálogo de los permisos de cuenta de servicio, con Publicador de Pub/Sub y Suscriptor de Pub/Sub, si se hace clic en el botón Continuar

  7. Haz clic en Continuar. No es necesario otorgar a los usuarios acceso a esta cuenta de servicio.

  8. Haz clic en Crear clave. La biblioteca cliente usa la clave para acceder a la API de Pub/Sub.

  9. Selecciona JSON y haz clic en Crear.

    La clave se envía a la carpeta Descargas. A los fines de esta guía de inicio rápido, puedes dejarla allí.

  10. Cambia el nombre del archivo de claves por ~/Downloads/key.json.

Instala el SDK de Cloud

  1. Sigue las instrucciones para instalar e inicializar el SDK de Cloud.

    • Mientras se inicializa el SDK de Cloud, selecciona la opción de ingresar un ID de proyecto y, luego, ingresa el ID del proyecto que creaste o elígelo en la sección de configuración.

    • Puedes volver a esta guía de inicio rápido una vez que hayas instalado e inicializado el SDK de Cloud. No necesitas instalar otros componentes ni descargar las bibliotecas cliente de Cloud.

    Después de haber instalado el SDK de Cloud, puedes usar la herramienta de línea de comandos de gcloud para realizar operaciones de Pub/Sub en Compute Engine.

  2. Inicia una terminal nueva antes de usar estos comandos de gcloud:

    gcloud pubsub topics list
    gcloud pubsub subscriptions list
    

    También puedes usar gcloud config set project PROJECT_ID para cambiar el proyecto que configuraste durante la inicialización.

Obtén la última versión de Python y configura un entorno virtual

En esta guía de inicio rápido, se proporciona un ejemplo de uso, por lo que no necesitas seguir el ejemplo que se muestra en la sección de configuración del entorno virtual. Puedes volver a esta guía de inicio rápido una vez que hayas instalado el entorno virtual.

Consulta el código de publicador y suscriptor

  1. Crea una carpeta de proyecto que contenga los archivos de Python de Pub/Sub necesarios para esta guía de inicio rápido. Luego, ábrela y descarga el código:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Cierra cualquier terminal abierta antes de continuar.

Configura tres terminales

  1. Inicia una terminal para cada aplicación de guía de inicio rápido (una de publicador y dos de suscriptor). En cada una de las terminales, realiza todas las operaciones de esta sección. Por conveniencia, nos referimos a estas terminales del siguiente modo:

    • terminal publisher
    • terminal sub_one
    • terminal sub_two
  2. Crea un entorno virtual de Python y actívalo.

    • En la primera terminal, ejecuta este comando:

      virtualenv --python python2.7 pyenv-qs && source pyenv-qs/bin/activate
    • En las otras dos terminales, alcanza con el siguiente comando:

      source pyenv-qs/bin/activate

    Después de ejecutar el comando de activación, el símbolo del sistema debe incluir (pyenv-qs) $.

    También puedes destinar tu entorno virtual a una versión diferente de Python.

  3. Asegúrate de que estás usando el entorno virtual como se describe en la guía de configuración:

    pip install --upgrade google-cloud-pubsub

    Asocia la clave JSON con la cuenta de servicio. Asignaste las funciones clave de Pub/Sub cuando creaste las credenciales de cuenta de servicio.

    export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
  4. Configura una variable de entorno con el ID de tu proyecto actual. Este comando de gcloud determina el ID del proyecto seleccionado en la actualidad y lo establece como una variable:

    export PROJECT=`gcloud config get-value project`

    Para verificar que tu GCP actual esté registrado de forma correcta como esta variable, sigue estos pasos:

    echo $PROJECT
  5. Ve a la carpeta de tu proyecto y, luego, navega hacia la carpeta del ejemplo de la guía de inicio rápido:

    cd python-docs-samples/pubsub/cloud-client/quickstart/
    

Inicia las apps y observa el flujo de mensajes

Inicia la aplicación Subscriber 1

En la terminal sub_one, inicia Subscriber 1:

python sub.py $PROJECT sub_one

Una vez iniciada, esta aplicación sondea la suscripción de Pub/Sub sub_one.

La aplicación Subscriber 1 se pone a la escucha de mensajes en la suscripción sub_one.

Inicia la aplicación Publisher

En la terminal publisher, inicia la aplicación Publisher:

python pub.py $PROJECT hello_topic
  • La aplicación Publisher envía el mensaje “Hello, World!” a Pub/Sub sin tener en cuenta las suscripciones existentes. La aplicación también asigna un ID de mensaje.

  • La aplicación Subscriber 1 recibe el mensaje “Hello, World!”, lo muestra y envía una confirmación de recepción a Pub/Sub.

  • La aplicación Publisher muestra la confirmación de recepción. La confirmación de recepción le indica a Pub/Sub que el mensaje se procesó con éxito y no necesita reenviarse a este o cualquier otro suscriptor de sub_one.

  • Pub/Sub quita el mensaje de sub_one.

La aplicación Publisher publica el mensaje y le asigna un ID de mensaje. La aplicación Subscriber 1 recibe el mensaje “Hello, World!” y envía una confirmación de recepción

Inicia la aplicación Subscriber 2

En la terminal sub_two, inicia Subscriber 2:

python sub.py $PROJECT sub_two

Este suscriptor recibe mensajes entregados a la suscripción sub_two. Subscriber 2 vuelve a usar la secuencia de comandos sub.py. La diferencia es que Subscriber 2 no se inicia hasta que Publisher haya enviado el mensaje al tema y las suscripciones. Si Publisher llamara directamente a la aplicación Subscriber 2, la aplicación de publicación tendría que esperar hasta que apareciera Subscriber 2 o tendría que agotar el tiempo de espera. Pub/Sub administra este proceso. Para ello, guarda el mensaje destinado a Subscriber 2.

Subscriber 2 se pone a la escucha y recibe el mensaje que estaba guardado en sub_two

Ahora estás listo para desarrollar con Pub/Sub.

¿Cómo te fue?

Hay recursos y vínculos adicionales disponibles en la página de asistencia de Pub/Sub.

Realiza una limpieza

  1. Detén todas las aplicaciones en ejecución.

  2. Borra el directorio ~/pubsub-quickstart de tu entorno local.

  3. Cierra el proyecto de la guía de inicio rápido en la sección IAM y administración de Google Cloud Console.

  4. Quita las credenciales de cuenta de servicio: rm ~/Downloads/key.json

Próximos pasos

Puedes probar algunas de estas opciones:

  • Examina los códigos pub.py y sub.py de la guía de inicio rápido y busca otros ejemplos de Pub/Sub en Github. Como ejercicio, crea una versión de pub.py que publique la hora local cada segundo.

  • Aprende a agrupar mensajes por lotes.

  • Procesa suscripciones de Pub/Sub de gran volumen con Cloud Dataflow.

  • Con las suscripciones de envío, recibe mensajes que activen los extremos de App Engine o Cloud Functions.

  • Recupera mensajes confirmados como recibidos con anterioridad mediante la reproducción. De forma predeterminada, Pub/Sub quita los mensajes confirmados como recibidos de las suscripciones. En esta guía de inicio rápido, por ejemplo, no podrás volver a ejecutar sub.py para recibir el mensaje “Hello, World!” de nuevo. La función de reproducción te permite configurar suscripciones para que puedas recibir mensajes después de haber confirmado su recepción.