Déclencheurs Pub/Sub


Pub/Sub de Google Cloud est un bus de messages distribué à l'échelle mondiale qui évolue automatiquement selon vos besoins. Vous pouvez créer une fonction qui gère les événements Pub/Sub à l'aide de functions.pubsub .

Déclencher une fonction pub/sub

Vous pouvez déclencher une fonction chaque fois qu'un nouveau message Pub/Sub est envoyé à un sujet spécifique. Vous devez spécifier le nom du sujet Pub/Sub sur lequel vous souhaitez déclencher votre fonction et définir l'événement dans le gestionnaire d'événements onPublish() :

exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {
  // ...
});

Accéder à la charge utile du message pub/sub {:#access-pub/sub}

La charge utile du message Pub/Sub est accessible à partir de l'objet Message renvoyé à votre fonction. Pour les messages avec JSON dans le corps du message Pub/Sub, le SDK Firebase pour Cloud Functions dispose d'une propriété d'assistance pour décoder le message. Par exemple, voici un message publié avec une simple charge utile JSON :

gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}'

Vous pouvez accéder à une charge utile de données JSON comme celle-ci via la propriété 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);
  }

D'autres charges utiles non JSON sont contenues dans le message Pub/Sub sous forme de chaînes codées en base64 dans l'objet de message. Pour lire un message comme celui-ci, vous devez décoder la chaîne codée en base64 comme indiqué :

gcloud pubsub topics publish topic-name --message 'MyMessage'

// Decode the PubSub Message body.
const messageBody = message.data ? Buffer.from(message.data, 'base64').toString() : null;

Accéder aux attributs du message {:#access-message}

Le message Pub/Sub peut être envoyé avec les attributs de données définis dans la commande de publication. Par exemple, vous pouvez publier un message avec un attribut name :

gcloud pubsub topics publish topic-name --attribute name=Xenia

Vous pouvez lire ces attributs à partir de Message.attributes :

// Get the `name` attribute of the message.
const name = message.attributes.name;

Vous remarquerez peut-être que certaines données de base telles que l'ID du message ou l'heure de publication du message ne sont pas disponibles dans Message.attributes . Pour contourner ce problème, vous pouvez accéder à ces détails dans le EventContext de l'événement déclencheur. Par exemple:

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);
});