Déclencheurs Pub/Sub


Pub/Sub de Google Cloud est un service de messagerie distribué dans le monde entier qui effectue un scaling automatique en fonction des besoins. Vous pouvez déclencher une fonction chaque fois qu'un nouveau message Pub/Sub est envoyé à un sujet spécifique.

Importer les modules requis

Pour commencer, importez les modules requis pour gérer les événements Pub/Sub:

Node.js

const {onMessagePublished} = require("firebase-functions/v2/pubsub");
const logger = require("firebase-functions/logger");

Python

from firebase_functions import pubsub_fn

Déclencher la fonction

Vous devez spécifier le nom du sujet Pub/Sub que vous souhaitez déclencher pour votre fonction, puis définir l'événement dans le gestionnaire d'événements:

Node.js

exports.hellopubsub = onMessagePublished("topic-name", (event) => {

Python

@pubsub_fn.on_message_published(topic="topic-name")
def hellopubsub(event: pubsub_fn.CloudEvent[pubsub_fn.MessagePublishedData]) -> None:
    """Log a message using data published to a Pub/Sub topic."""

Accéder à la charge utile du message Pub/Sub

La charge utile du message Pub/Sub est accessible à partir de l'objet de message renvoyé à votre fonction. Pour les messages contenant du code 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 suit via la propriété json:

Node.js

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

Python

# Get the `name` attribute of the PubSub message JSON body.
try:
    data = event.data.message.json
except ValueError:
    print("PubSub message was not JSON")
    return
if data is None:
    return
if "name" not in data:
    print("No 'name' key")
    return
name = data["name"]

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 du 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'

Node.js

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

Python

# Decode the PubSub message body.
message_body = base64.b64decode(event.data.message.data)

Accéder aux attributs des messages

Le message Pub/Sub 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 la propriété correspondante de l'objet message:

Node.js

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

Python

# Get the `name` attribute of the message.
if "name" not in event.data.message.attributes:
    print("No 'name' attribute")
    return
name = event.data.message.attributes["name"]