Google Cloud's Pub/Sub est un
service de messagerie distribué dans le monde entier qui effectue un scaling automatique en fonction des besoins. Vous
pouvez créer une fonction qui gère les Pub/Sub événements à l'aide de
functions.pubsub.
Déclencher une fonction Pub/Sub
Vous pouvez déclencher une fonction chaque fois qu'un nouveau Pub/Sub message est envoyé
à un sujet spécifique. Vous devez spécifier le nom du sujet Pub/Sub que
vous souhaitez déclencher et définir l'événement dans le
onPublish()
gestionnaire d'événements :
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 contenant du code JSON dans le Pub/Sub corps
du message, le Firebase SDK pour Cloud Functions dispose d'une propriété d'assistance permettant de décoder le message. Voici, par exemple, 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
json propriété :
// 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); }
Les autres charges utiles non JSON sont contenues dans le Pub/Sub message sous forme de chaînes encodées en base64 dans l'objet 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 du message
Pub/Sub message peut être envoyé avec des 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 ou l'heure de publication du message, ne sont pas disponibles dans Message.attributes. Pour contourner
ce problème, vous pouvez accéder à ces informations dans l'événement déclencheur
EventContext.
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);
});