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 functions.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 onPublish()
:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
Accede a la carga útil del mensaje de Pub/Sub {:#access-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 = message.json.name; } catch (e) { functions.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 cadena codificada en base 64 en el objeto del mensaje. Para leer un mensaje como el siguiente, debes decodificar la cadena codificada en base 64 como se muestra:
gcloud pubsub topics publish topic-name --message 'MyMessage'
// Decode the PubSub Message body. const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;
Atributos de mensaje de acceso {:#access-message}
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 = message.attributes.name;
Tal vez notes que cierta información básica, como el ID del mensaje o su hora de publicación, no está disponible en Message.attributes
. Para solucionar este problema,
puedes acceder a estos detalles en el EventContext
del evento de activación.
Por ejemplo:
exports.myFunction = functions.pubsub.topic('topic1').onPublish((message, context) => {
console.log('The function was triggered at ', context.timestamp);
console.log('The unique ID for the event is', context.eventId);
});