Pub/Sub de Google Cloud es un bus de mensajes distribuido globalmente que se escala automáticamente según lo necesita. Puedes activar una función cada vez que se envía un nuevo mensaje de Pub/Sub a un tema específico.
Importar los módulos requeridos
Para comenzar, importe los módulos necesarios para manejar eventos de Pub/Sub:
Nodo.js
const {onMessagePublished} = require("firebase-functions/v2/pubsub");
const logger = require("firebase-functions/logger");
Pitón
from firebase_functions import pubsub_fn
Activar la función
Debes especificar el nombre del tema de Pub/Sub que deseas que active tu función y configurar el evento dentro del controlador de eventos:
Nodo.js
exports.hellopubsub = onMessagePublished("topic-name", (event) => {
Pitón
@pubsub_fn.on_message_published(topic="topic-name")
def hellopubsub(event: pubsub_fn.CloudEvent[pubsub_fn.MessagePublishedData]) -> None:
"""Log a message using data published to a Pub/Sub topic."""
Acceda a la carga útil del mensaje de publicación/subscripción
Se puede acceder a la carga útil del mensaje de Pub/Sub desde el objeto de mensaje devuelto a su función. Para mensajes con JSON en el cuerpo del mensaje de Pub/Sub, el SDK de Firebase para Cloud Functions tiene una propiedad auxiliar para decodificar el mensaje. Por ejemplo, aquí hay un mensaje publicado con una carga útil JSON simple:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
Puede acceder a una carga útil de datos JSON como esta a través de la propiedad json
:
Nodo.js
// Get the `name` attribute of the PubSub message JSON body. let name = null; try { name = event.data.message.json.name; } catch (e) { logger.error("PubSub message was not JSON", e); }
Pitón
# Get the `name` attribute of the PubSub message JSON body.
try:
data = event.data.message.json
except ValueError:
print("PubSub message was not JSON")
return
if data is None:
return
if "name" not in data:
print("No 'name' key")
return
name = data["name"]
Otras cargas útiles que no son JSON están contenidas en el mensaje de Pub/Sub como cadenas codificadas en base64 en el objeto del mensaje. Para leer un mensaje como el siguiente, debe decodificar la cadena codificada en base64 como se muestra:
gcloud pubsub topics publish topic-name --message 'MyMessage'
Nodo.js
// Decode the PubSub Message body. const message = event.data.message; const messageBody = message.data ? Buffer.from(message.data, "base64").toString() : null;
Pitón
# Decode the PubSub message body.
message_body = base64.b64decode(event.data.message.data)
Acceder a los atributos del mensaje
El mensaje Pub/Sub se puede enviar con atributos de datos establecidos en el comando de publicación. Por ejemplo, podrías publicar un mensaje con un atributo name
:
gcloud pubsub topics publish topic-name --attribute name=Xenia
Puede leer dichos atributos desde la propiedad correspondiente del objeto de mensaje:
Nodo.js
// Get the `name` attribute of the message. const name = event.data.message.attributes.name;
Pitón
# Get the `name` attribute of the message.
if "name" not in event.data.message.attributes:
print("No 'name' attribute")
return
name = event.data.message.attributes["name"]