Activadores de Pub/Sub

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;