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.
Requisitos:
- Una Cuenta de Google
- Hasta una hora de tiempo para completar la guía
Descripción general del sistema
En este instructivo, iniciarás una aplicación de publicador que envíe el mensaje “Hello, World!” a dos suscriptores mediante la comunicación de uno a varios, como se ilustra a continuación:
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:
- Crear el tema de Pub/Sub y las suscripciones necesarias
- Crear una cuenta de servicio a fin de que las aplicaciones la usen para la autenticación
- Configura los permisos de IAM.
- Iniciar tres aplicaciones independientes: una de publicador y dos de suscriptor
Configuración del instructivo
Configura tu proyecto de Google Cloud, y las suscripciones y el tema de Pub/Sub.
Accede a Google Cloud Console.
Ve a la consola de Google Cloud.
Si es la primera vez que usas Cloud, haz clic en Activar y sigue las indicaciones para configurar tu cuenta de Cloud.
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 Google Cloud Console, toma nota del ID del proyecto. Usa este valor para configurar tu proyecto actual de Cloud Storage durante el proceso de inicialización de la CLI de gcloud. También debes pasar este ID a la secuencia de comandos de Python cuando inicies las aplicaciones de publicador y suscriptor.
Ve a la sección Pub/Sub de la consola de Google Cloud.
Sigue las indicaciones para habilitar la API.
Haz clic en Crear un tema. Las aplicaciones de publicación envían mensajes a los temas. Usa hello_topic como Nombre.
En la página Detalles del tema, haz clic en Crear una suscripción:
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.
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.
En este punto, el entorno de Pub/Sub está listo para administrar el flujo de mensajes entre las aplicaciones de publicación y suscripción.
Crea credenciales de cuenta de servicio
Realiza los siguientes pasos solo si usas una cuenta de servicio:
Crear una cuenta de servicio:
En la consola de Google Cloud, ve a la página Cuentas de servicio.
Selecciona tu proyecto.
Haz clic en
Crear cuenta de servicio.En el campo Nombre de la cuenta de servicio, ingresa un nombre, como
pubsub-tutorial
. La consola de Google Cloud completa el campo ID de cuenta de servicio según este nombre.Opcional: En el campo Descripción de la cuenta de servicio, ingresa una descripción para la cuenta de servicio.
Haz clic en Crear y continuar.
Para el tutorial, 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.
Haz clic en Agregar otra función y agrega Suscriptor de Pub/Sub.
Haz clic en Listo para terminar de crear la cuenta de servicio.
No cierres la ventana del navegador. La usarás en la próxima tarea.
Descarga una clave JSON para la cuenta de servicio que acabas de crear. La biblioteca cliente usa la clave para acceder a la API de Pub/Sub.
- En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
- Haga clic en Claves.
- Haz clic en Agregar clave, luego haz clic en Crear clave nueva.
Haz clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
La clave se envía a la carpeta Descargas. A los fines de este instructivo, puedes dejarla allí.
Cambia el nombre del archivo de claves por ~/Downloads/key.json.
Haz clic en Cerrar.
Para explorar otras formas de proporcionar credenciales que no incluyen una cuenta de servicio, consulta Proporciona las credenciales de las credenciales predeterminadas de la aplicación.
Para otorgar funciones a tu Cuenta de Google, ejecuta el siguiente comando una vez por cada función de IAM que quieras aplicar.
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Reemplaza PROJECT_ID con el ID del proyecto.
- Reemplaza EMAIL_ADDRESS por tu dirección de correo electrónico.
- Reemplaza ROLE por cada rol individual.
Instala Google Cloud CLI
Sigue las instrucciones para instalar e inicializar Google Cloud CLI.
Cuando inicialices la CLI de gcloud, selecciona la opción de ingresar un ID de proyecto y el ID del proyecto que creaste o elegiste en la sección de configuración.
Puedes volver a este instructivo después de instalar y, luego, inicializar la CLI de gcloud. No necesitas instalar otros componentes ni descargar las bibliotecas cliente de Cloud.
Después de instalar la CLI de gcloud, puedes usar Google Cloud CLI para realizar operaciones de Pub/Sub en Compute Engine.
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.
Obtener Python y configurar un entorno virtual
Completa las instrucciones para instalar Python 3 en macOS.
Configura un entorno virtual (opcional).
En este tutorial, 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 este tutorial una vez que hayas instalado el entorno virtual.
Consulta el código de publicador y suscriptor
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/googleapis/python-pubsub.git
Cierra cualquier terminal abierta antes de continuar.
Configura tres terminales
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
Crea un entorno virtual de Python y actívalo.
En la primera terminal, ejecuta este comando para crear y activar un entorno virtual llamado
pyenv-qs
:Bash
python -m venv pyenv-qs source pyenv-qs/bin/activate
PowerShell
py -m venv pyenv-qs .\pyenv-qs\Scripts\activate
En las otras dos terminales, ejecuta el siguiente comando:
Bash
source pyenv-qs/bin/activate
PowerShell
.\pyenv-qs\Scripts\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.
Instala la biblioteca cliente de Pub/Sub para Python mediante
pip
:python -m pip install --user --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. Las bibliotecas cliente de Pub/Sub acceden a la variable de entorno
GOOGLE_APPLICATION_CREDENTIALS
y se les otorgan las funciones y los permisos asociados con la cuenta de servicio.Bash
export GOOGLE_APPLICATION_CREDENTIALS=~/Downloads/key.json
PowerShell
$env:GOOGLE_APPLICATION_CREDENTIALS="$HOME\Downloads\key.json"
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:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
Para verificar que tu cuenta de Google Cloud actual esté registrada de forma correcta como esta variable, sigue estos pasos:
Bash
echo $PROJECT
PowerShell
$env:PROJECT
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-pubsub/samples/snippets/quickstart/
Inicia las apps y observa el flujo de mensajes
Inicia la aplicación Subscriber 1
En la terminal sub_one, inicia Subscriber 1:
Bash
python sub.py $PROJECT sub_one
PowerShell
py sub.py $env:PROJECT sub_one
Una vez iniciada, esta aplicación abre una conexión de transmisión bidireccional con el servidor. Pub/Sub entrega mensajes a través de la transmisión.
Inicia la aplicación Publisher
En la terminal publisher, inicia la aplicación Publisher:
Bash
python pub.py $PROJECT hello_topic
PowerShell
py pub.py $env:PROJECT hello_topic
Una vez que se inicia la aplicación del publicador, el sistema de Pub/Sub hace lo siguiente:
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.
Inicia la aplicación Subscriber 2
En la terminal sub_two, inicia Subscriber 2:
Bash
python sub.py $PROJECT sub_two
PowerShell
py sub.py $env: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.
Ahora estás listo para desarrollar con Pub/Sub.
¿Cómo fue?
Hay recursos y vínculos adicionales disponibles en la página de asistencia de Pub/Sub.
Realiza una limpieza
Detén todas las aplicaciones en ejecución.
Borra el directorio
~/pubsub-quickstart
de tu entorno local.Cierra el proyecto del instructivo en la sección IAM y administración de Google Cloud Console.
Quita las credenciales de cuenta de servicio:
rm ~/Downloads/key.json
¿Qué sigue?
Puedes probar algunas de estas opciones:
Examina los códigos
pub.py
ysub.py
del instructivo y explora otras muestras de Pub/Sub en Github. Como ejercicio, crea una versión depub.py
que publique la hora local cada segundo.Aprende a agrupar mensajes por lotes.
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 este instructivo, por ejemplo, no podrás volver a ejecutar
sub.py
para recibir el mensaje “Hello, World!”. La función de reproducción te permite configurar suscripciones para que puedas recibir mensajes después de haber confirmado su recepción.Comienza a usar las bibliotecas cliente en otros lenguajes.