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