En este instructivo, se explica cómo configurar un conjunto 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. El publicador 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.
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 en el siguiente diagrama:
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 este sistema, completa los siguientes pasos:
- Crea una cuenta de servicio de IAM que las aplicaciones usen para la autenticación.
- Configura los permisos de IAM.
- Crea un tema y una suscripción de Pub/Sub.
- Iniciar tres aplicaciones independientes: una de publicador y dos de suscriptor
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/pubsub.publisher, roles/pubsub.subscriber
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Instala Python
En este instructivo, se usan las bibliotecas cliente de Pub/Sub, que requieren Python 3.7 o versiones posteriores. Completa las instrucciones para instalar Python.
Configura tu proyecto de Pub/Sub
Para administrar el flujo de mensajes entre las aplicaciones de publicación y suscripción, debes crear un tema y dos suscripciones diferentes.
Crea un tema de Pub/Sub
Crea un tema con el ID hello_topic
:
gcloud pubsub topics create hello_topic
Crea suscripciones a Pub/Sub
Crea dos suscripciones y adjúntalos a tu tema.
Estas suscripciones son una suscripción StreamingPull, que es un tipo de suscripción de extracción.
Suscripción 1
Crea una suscripción con el ID sub_one
y adjúntala a hello_topic
.
gcloud pubsub subscriptions create sub_one --topic=hello_topic
Suscripción 2
Crea una suscripción con el ID sub_two
y adjúntala a hello_topic
.
gcloud pubsub subscriptions create sub_two --topic=hello_topic
Compila el sistema de uno a varios
Descarga el código de publicador y suscriptor
Descarga los archivos de Python de Pub/Sub necesarios para esta guía de inicio rápido.
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). Para tu comodidad, en este instructivo, se denominan a estas terminales de la siguiente manera:
- terminal publisher
- terminal sub_one
- terminal sub_two
En la terminal del publicador, crea y activa un entorno virtual de Python 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 terminales sub_one y sub_two, 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 incluye el siguiente valor
(pyenv-qs) $
.En la terminal del publicador, instala la biblioteca cliente de Pub/Sub para Python con
pip
:python -m pip install --upgrade google-cloud-pubsub
En las tres terminales, configura una variable de entorno con el ID de tu proyecto actual. Este comando de gcloud determina el ID del proyecto seleccionado y lo establece como una variable:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
En las tres terminales, cambia a la ruta de acceso del proyecto que contiene el código de muestra.
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
Después de 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 del código de muestra de tu entorno local.
Borra el tema.
gcloud pubsub topics delete hello_topic
Borra las suscripciones.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Cierra el proyecto del instructivo en la sección IAM y administración de la consola de Google Cloud.
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
¿Qué sigue?
Puedes probar algunas de estas opciones:
Examina los códigos
pub.py
ysub.py
del instructivo y busca otros ejemplos 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 idiomas.