Check out what’s new from Firebase at Google I/O 2022. Learn more

Déclencheurs Pub/Sub

Pub/Sub de Google Cloud est un bus de messages distribué à l'échelle mondiale qui s'adapte 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 pour 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

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 charge utile JSON simple :

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 encodées en base64 dans l'objet de message. Pour lire un message comme celui-ci, vous devez décoder la chaîne encodé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 des messages

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 de message ou l'heure de publication du message ne sont pas disponibles dans Message.attributes . Pour contourner ce problème, vous pouvez accéder à context.eventId et context.timestamp de l'événement déclencheur, avec lesquels vous pouvez déterminer quand un message a été publié et différencier un message d'un autre. Par example:

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