En este tutorial se explica cómo configurar un conjunto de aplicaciones que se comunican enviando mensajes a través de Pub/Sub en lugar de RPCs síncronas. Al desacoplar las aplicaciones, la mensajería:
- Hace que las aplicaciones sean más sólidas
- Puede simplificar el desarrollo
Por ejemplo, el llamante (editor) no necesita que el receptor (suscriptor) esté disponible. El editor envía un mensaje a Pub/Sub. El editor no necesita saber qué aplicaciones de suscriptor ni cuántas deben recibir el mensaje. Por lo tanto, se puede confiar en el servicio para enviar el mensaje a una o varias aplicaciones suscriptoras cuando estén disponibles.
Descripción general del sistema
En este tutorial, iniciará una aplicación de editor que envía el mensaje "Hello, World!" a dos suscriptores mediante la comunicación de uno a muchos, como se muestra en el siguiente diagrama:
Las dos aplicaciones de suscriptor usan el mismo código, pero las inicias en momentos diferentes. Este proceso muestra cómo Pub/Sub habilita la comunicación asíncrona. Para crear este sistema, sigue estos pasos:
- Crea una cuenta de servicio de IAM que las aplicaciones utilicen para la autenticación.
- Configura los permisos de gestión de identidades y accesos.
- Crea un tema y una suscripción de Pub/Sub.
- Inicia tres aplicaciones independientes: un editor y dos suscriptores.
Antes de empezar
- 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.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
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 the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Pub/Sub API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable pubsub.googleapis.com
-
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
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 the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
Descarga los archivos de Python de Pub/Sub necesarios para este tutorial.
git clone https://github.com/googleapis/python-pubsub.git
Cierra los terminales que tengas abiertos antes de continuar.
Inicia una terminal para cada aplicación del tutorial (un editor y dos suscriptores). Para mayor comodidad, en este tutorial se denominan de la siguiente manera:
- Terminal publisher
- Terminal sub_one
- Terminal sub_two
En la terminal publisher, 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 los 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 el terminal del editor, instala la biblioteca de cliente de Python de Pub/Sub con
pip
:python -m pip install --upgrade google-cloud-pubsub
En los tres terminales, configura una variable de entorno con el ID de tu proyecto. Este comando de gcloud determina el ID del proyecto seleccionado y lo define como una variable:
Bash
export PROJECT=`gcloud config get-value project`
PowerShell
$env:PROJECT=$(gcloud config get-value project)
En los tres terminales, cambia a la ruta del proyecto que contiene el código de ejemplo.
cd python-pubsub/samples/snippets/quickstart/
La aplicación Publisher envía el mensaje "Hello, World!" a Pub/Sub sin saber si hay suscripciones. El servidor también asigna un ID de mensaje.
La aplicación Suscriptor 1 recibe el mensaje "Hello World", lo imprime y envía una confirmación a Pub/Sub.
La aplicación Publisher imprime la confirmación. La confirmación indica a Pub/Sub que el mensaje se ha procesado correctamente y que no es necesario volver a enviarlo a este suscriptor (sub_one) ni a ningún otro.
- Detén todas las aplicaciones en ejecución.
- Elimina el directorio de código de ejemplo de tu entorno local.
Elimina el tema.
gcloud pubsub topics delete hello_topic
Elimina las suscripciones.
gcloud pubsub subscriptions delete sub_one
gcloud pubsub subscriptions delete sub_two
Cierra el proyecto del tutorial en la sección IAM y administración de la Google Cloud consola.
-
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
Consulta el código de
pub.py
ysub.py
del tutorial, y echa un vistazo a otros ejemplos de Pub/Sub en GitHub. Como ejercicio, crea una versión depub.py
que publique la hora local cada segundo.Consulta cómo enviar mensajes en lote.
Con las suscripciones Push, recibe mensajes que activan endpoints de App Engine o Cloud Functions.
Recupera los mensajes que ya has confirmado con replay. De forma predeterminada, Pub/Sub elimina los mensajes confirmados de las suscripciones. Por ejemplo, en este tutorial no podrás volver a ejecutar
sub.py
para recibir el mensaje "Hello, World!". La función de repetición te permite configurar suscripciones para recibir mensajes después de que se hayan confirmado.Consulta cómo empezar a usar las bibliotecas de cliente en otros lenguajes.
Instalar Python
En este tutorial se usan las bibliotecas de cliente de Pub/Sub, que requieren Python 3.7 o una versión posterior. Sigue las instrucciones para instalar Python.
Configurar el proyecto de Pub/Sub
Para gestionar el flujo de mensajes entre las aplicaciones de publicación y suscripción, crea un tema y dos suscripciones diferentes.
Crear un tema de Pub/Sub
Crea un tema con el ID hello_topic
:
gcloud pubsub topics create hello_topic
Crear suscripciones de Pub/Sub
Crea dos suscripciones y adjúntalas a tu tema.
Estas suscripciones son de tipo StreamingPull, que es un tipo de suscripción pull.
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
Crear el sistema de uno a muchos
Descargar el código del editor y del suscriptor
Configurar tres terminales
Inicia las aplicaciones y observa el flujo de mensajes
Inicia la aplicación del suscriptor 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 streaming bidireccional con el servidor. Pub/Sub envía los mensajes a través del flujo.
Iniciar 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 editor, el sistema Pub/Sub hace lo siguiente:
Pub/Sub elimina el mensaje de sub_one.
Iniciar la aplicación Suscriptor 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 los mensajes enviados a la suscripción sub_two.
Subscriber 2 reutiliza la secuencia de comandos sub.py
. La diferencia es que Subscriber
2 no se inicia hasta que el editor ha enviado el mensaje al tema y a las suscripciones. Si Publisher llamara directamente a Subscriber 2, la aplicación de publicación tendría que esperar a que Subscriber 2 se conectara o se agotaría el tiempo de espera. Pub/Sub gestiona este proceso guardando el mensaje de forma eficaz para el suscriptor 2.
Ya puedes empezar a desarrollar con Pub/Sub.
¿Cómo ha ido?
Puedes consultar más recursos y enlaces en la página de asistencia de Pub/Sub.
Limpieza
Siguientes pasos
Aquí tienes algunas cosas que puedes probar: