Pub/Sub de Google Cloud es un bus de mensajes con distribución global que ajusta su escala de forma automática en la medida que lo necesites. Puedes usar
pubsub
para crear una función que controle los eventos de
Pub/Sub.
Activa una función de Pub/Sub
Puedes activar una función cada vez que se envíe un mensaje de Pub/Sub nuevo a un tema determinado. Debes especificar el nombre del tema de Pub/Sub que quieres que active tu función y configurar el evento dentro del controlador onMessagePublished()
:
exports.hellopubsub = onMessagePublished("topic-name", (event) => { // ... });
Accede a la carga útil del mensaje de Pub/Sub
Puedes acceder a la carga útil del mensaje de Pub/Sub desde el objeto Message
que se mostró a tu función. En el caso de los mensajes con JSON en el cuerpo del mensaje de Pub/Sub, el SDK de Firebase para Cloud Functions tiene una propiedad de ayuda que decodifica el mensaje. Por ejemplo, este es un mensaje publicado con una carga útil JSON simple:
gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'
Puedes acceder a una carga útil de datos JSON como la anterior a través de la propiedad json
:
// 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); }
Las cargas útiles que no son JSON se incluyen en el mensaje de Pub/Sub como una string codificada en base 64 en el objeto del mensaje. Para leer un mensaje como el siguiente, debes decodificar la string codificada en base 64 como se muestra:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const message = event.data.message; const messageBody = message.data ? Buffer.from(message.data, "base64").toString() : null;
Accede a los atributos del mensaje
El mensaje de Pub/Sub se puede enviar con atributos de datos configurados 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
Puedes leer estos atributos desde
Message.attributes
:
// Get the `name` attribute of the message. const name = event.data.message.attributes.name;