Pub/Sub-Trigger

Pub/Sub von Google Cloud ist ein global verteilter Nachrichtenbus, der automatisch nach Bedarf skaliert. Mithilfe von functions.pubsub können Sie eine Funktion erstellen, die Pub/Sub-Ereignisse verarbeitet.

Lösen Sie eine Pub/Sub-Funktion aus

Sie können eine Funktion auslösen, wenn eine neue Pub/Sub-Nachricht an ein bestimmtes Thema gesendet wird. Sie müssen den Namen des Pub/Sub-Themas angeben, das Ihre Funktion auslösen soll, und das Ereignis in der Ereignisprozedur onPublish() :

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

Greifen Sie auf die Payload der Pub/Sub-Nachricht zu

Auf die Nutzlast für die Pub/Sub-Nachricht kann über das Message Objekt zugegriffen werden, das an Ihre Funktion zurückgegeben wird. Für Nachrichten mit JSON im Pub/Sub-Nachrichtentext verfügt das Firebase SDK für Cloud Functions über eine Hilfseigenschaft zum Decodieren der Nachricht. Hier ist beispielsweise eine Nachricht, die mit einer einfachen JSON-Nutzlast veröffentlicht wird:

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

Sie können auf eine JSON-Datennutzlast wie diese über die Eigenschaft json zugreifen:

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

Andere Nicht-JSON-Nutzlasten sind in der Pub/Sub-Nachricht als base64-codierte Strings im Nachrichtenobjekt enthalten. Um eine Nachricht wie die folgende zu lesen, müssen Sie die base64-codierte Zeichenfolge wie gezeigt decodieren:

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

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

Greifen Sie auf Nachrichtenattribute zu

Pub/Sub-Nachrichten können mit im Veröffentlichungsbefehl festgelegten Datenattributen gesendet werden. Beispielsweise könnten Sie eine Nachricht mit einem name veröffentlichen:

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

Sie können solche Attribute aus Message.attributes lesen:

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

Möglicherweise stellen Sie fest, dass einige grundlegende Daten wie die Nachrichten-ID oder die Veröffentlichungszeit der Nachricht nicht in Message.attributes verfügbar sind. Um dies zu umgehen, können Sie auf die context.eventId und context.timestamp des auslösenden Ereignisses zugreifen, mit denen Sie feststellen können, wann eine Nachricht veröffentlicht wurde, und eine Nachricht von einer anderen unterscheiden können. Zum Beispiel:

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