Para desarrollar y probar tu aplicación de forma local, puedes usar el emulador de Pub/Sub, que ofrece una emulación local del servicio de producción de Pub/Sub. El emulador de Pub/Sub se ejecuta con la CLI de Google Cloud.
Para ejecutar la aplicación en el emulador, primero inicia el emulador y define las variables de entorno. Tu aplicación debe comunicarse con el emulador en lugar de con el servicio de producción de Pub/Sub. Los recursos creados y los mensajes publicados en el emulador se mantienen durante la duración de la sesión del emulador.
Antes de empezar
Completa los siguientes requisitos previos antes de usar el emulador de Pub/Sub:
Configura un entorno de desarrollo de Python.
Instala un JDK.
Instala Google Cloud CLI.
Crea una aplicación con las bibliotecas de cliente de Cloud.
Instalar el emulador
Instala el emulador desde una petición de comando:
gcloud components install pubsub-emulator gcloud components update
Instalar el emulador como imagen de contenedor
Para instalar y ejecutar el emulador como contenedor, descarga e instala la imagen Docker de gcloud.
Iniciar el emulador
Inicia el emulador invocando pubsub start
desde un símbolo del sistema. Antes de ejecutar el comando, sustituye PUBSUB_PROJECT_ID por unGoogle Cloud ID de proyecto válido. La cadena no tiene que representar un proyecto real de Google Cloud porque el emulador de Pub/Sub se ejecuta de forma local.
gcloud beta emulators pubsub start --project=PUBSUB_PROJECT_ID [options]
Consulta la gcloud beta emulators pubsub start
para ver la lista completa de marcas.
Después de iniciar el emulador, verás un mensaje similar al siguiente:
... [pubsub] This is the Pub/Sub fake. [pubsub] Implementation may be incomplete or differ from the real system. ... [pubsub] INFO: Server started, listening on 8085
Este mensaje indica que el servidor de Pub/Sub se ejecuta en el endpoint del emulador de tu máquina local en lugar del endpoint Google Cloud . Todas las operaciones se realizan de forma local, incluidas las siguientes:
- Crear un tema o una suscripción
- Publicación
- Suscribiéndose
Configurar variables de entorno
Después de iniciar el emulador, debes definir las variables de entorno para que tu aplicación se conecte al emulador en lugar de a Pub/Sub. Define estas variables de entorno en el mismo equipo que usas para ejecutar tu aplicación.
Debes definir las variables de entorno cada vez que inicies el emulador. Las variables de entorno dependen de los números de puerto asignados dinámicamente, que podrían cambiar al reiniciar el emulador.
Definir las variables automáticamente
Si tu aplicación y el emulador se ejecutan en el mismo ordenador, puedes definir las variables de entorno automáticamente:
Linux o macOS
Ejecuta env-init
mediante la sustitución de comandos:
$(gcloud beta emulators pubsub env-init)
Windows
Crea y ejecuta un archivo por lotes con la salida de env-init
:
gcloud beta emulators pubsub env-init > set_vars.cmd && set_vars.cmd
Tu aplicación se conectará al emulador de Pub/Sub.
Definir las variables manualmente
Si tu aplicación y el emulador se ejecutan en máquinas diferentes, define las variables de entorno manualmente:
Ejecuta el comando
env-init
:gcloud beta emulators pubsub env-init
En la máquina que ejecuta tu aplicación, define la variable de entorno
PUBSUB_EMULATOR_HOST
y el valor según las indicaciones de la salida del comandoenv-init
. Esta configuración conecta tu aplicación al emulador. También puedes definir la variable de entornoPUBSUB_PROJECT_ID
para el proyecto que quieras usar en el emulador.Linux o macOS export PUBSUB_EMULATOR_HOST=[::1]:8432 export PUBSUB_PROJECT_ID=my-project-id
Windows set PUBSUB_EMULATOR_HOST=[::1]:8432 set PUBSUB_PROJECT_ID=my-project-id
Tu aplicación se conectará al emulador de Pub/Sub.
Nota: Si usas el servidor de desarrollo local de Python App Engine Standard, debes pasar esta variable de entorno en la línea de comandos de la siguiente manera:
dev_appserver.py app.yaml --env_var PUBSUB_EMULATOR_HOST=${PUBSUB_EMULATOR_HOST}
dev_appserver.py
está incluido en tu [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
.
Usar el emulador
Para usar el emulador, debes tener una aplicación creada con las bibliotecas de cliente de Cloud.
El emulador no admite los comandos Google Cloud console ni gcloud pubsub
.
En el siguiente ejemplo se muestra cómo usar el emulador y una aplicación que usa la biblioteca de cliente de Cloud para Python para realizar varias operaciones. Algunos ejemplos de estas operaciones son cómo crear un tema, publicar mensajes y leer mensajes.
Sigue estos pasos en el equipo en el que hayas definido las variables de entorno del emulador:
Obtén las muestras de Python de Pub/Sub de GitHub clonando el repositorio completo de Python.
En el repositorio clonado, ve al directorio
samples/snippets
. Completa el resto de los pasos en este directorio.En el directorio
samples/snippets
, instala las dependencias que necesites para ejecutar el ejemplo:pip install -r requirements.txt
Para crear un tema, sigue estos pasos:
python publisher.py PUBSUB_PROJECT_ID create TOPIC_ID
(Opcional) Si no tienes ningún endpoint push local para probar las suscripciones push en el emulador, sigue estos pasos para crear uno en
http://[::1]:3000/messages
.- Instala JSON Server.
npm install -g json-server
- Inicia el servidor JSON.
dondejson-server --port 3000 --watch db.json
db.json
contiene el siguiente código inicial:{ "messages": [] }
- Anota
http://[::1]:3000/messages
para PUSH_ENDPOINT en el siguiente paso.
- Instala JSON Server.
Crea una suscripción al tema:
Para crear una suscripción de extracción, sigue estos pasos:
python subscriber.py PUBSUB_PROJECT_ID create TOPIC_ID SUBSCRIPTION_ID
Para crear una suscripción de inserción, sigue estos pasos:
python subscriber.py PUBSUB_PROJECT_ID create-push TOPIC_ID SUBSCRIPTION_ID \ PUSH_ENDPOINT
Publica mensajes en el tema:
python publisher.py PUBSUB_PROJECT_ID publish TOPIC_ID
Lee los mensajes publicados en el tema:
Para recuperar mensajes de tu suscripción de extracción, sigue estos pasos:
python subscriber.py PUBSUB_PROJECT_ID receive SUBSCRIPTION_ID
Observa los mensajes enviados a tu endpoint push local. Por ejemplo, los mensajes tienen el siguiente aspecto:
{ "messages": [ { "subscription": "projects/PUBSUB_PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "message": { "data": "TWVzc2FnZSBudW1iZXIgMQ==", "messageId": "10", "attributes": {} }, "id": 1 }, ... ] }
Acceder a variables de entorno
En todos los lenguajes, excepto Java y C#, si has definido PUBSUB_EMULATOR_HOST
tal como se describe en Definir variables de entorno,
las bibliotecas de cliente de Pub/Sub llaman automáticamente a la API que se ejecuta en la instancia local en lugar de a Pub/Sub.
Sin embargo, las bibliotecas de cliente de C# y Java requieren que modifiques el código para usar el emulador:
C#
Antes de probar este ejemplo, sigue las instrucciones de configuración de C# que se indican en la guía de inicio rápido de Pub/Sub con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API C# Pub/Sub.
Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración de Java que se indican en la guía de inicio rápido de Pub/Sub con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java Pub/Sub.
Para autenticarte en Pub/Sub, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Detener el emulador
Para detener el emulador, pulsa Control + C.
Después de detener el emulador, ejecuta el siguiente comando para quitar la variable de entorno PUBSUB_EMULATOR_HOST
de forma que tu aplicación se conecte a Pub/Sub:
unset PUBSUB_EMULATOR_HOST
set PUBSUB_EMULATOR_HOST=
Argumentos de línea de comandos del emulador
Para obtener información sobre los argumentos de línea de comandos del emulador de Pub/Sub, consulta gcloud beta emulators pubsub
.
Funciones compatibles
El emulador admite las siguientes funciones de Pub/Sub:
- Publicar mensajes
- Recibir mensajes de suscripciones push y pull
- Ordenar mensajes
- Volver a reproducir mensajes
- Reenviar mensajes a temas de mensajes fallidos
- Políticas de reintentos en la entrega de mensajes
- Compatibilidad con esquemas de Avro
Limitaciones conocidas
- No se admiten las RPCs de
UpdateTopic
yUpdateSnapshot
. - No se admiten las operaciones de gestión de identidades y accesos.
- No se admite la conservación de mensajes configurable; todos los mensajes se conservan indefinidamente.
- No se admite la caducidad de la suscripción. Las suscripciones no caducan.
- No se admite el filtrado.
- Compatibilidad con esquemas de búferes de protocolo.
- Se pueden crear suscripciones de BigQuery, pero no se envían mensajes a BigQuery.
- No se admite la búsqueda por marca de tiempo en suscripciones ordenadas.
- Los temas y las suscripciones se pueden crear con transformaciones de un solo mensaje (SMTs), pero los mensajes no se transformarán.
Para registrar incidencias, envía una herramienta de seguimiento de incidencias pública.
Siguientes pasos
- Para saber cómo usar el emulador de Pub/Sub con minikube, consulta esta entrada de blog.