Cloud Pub/Sub triggers

Google Cloud Pub/Sub is a globally distributed message bus that automatically scales as you need it. You can create a function that handles Google Cloud Pub/Sub events by using functions.pubsub.

Trigger a pub/sub function

You can trigger a function whenever a new Pub/Sub message is sent to a specific topic. You must specify the Pub/Sub topic name that you want to trigger your function, and set the event within the onPublish() event handler:

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

Access the pub/sub message payload

The payload for the Pub/Sub message is accessible from the Message object returned to your function. For messages with JSON in the Pub/Sub message body, the Firebase SDK for Cloud Functions has a helper property to decode the message. For example, here is a message published with a simple JSON payload:

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

You can access a JSON data payload like this via the json property:

  // Get the `name` attribute of the PubSub message JSON body.
  let name = null;
  try {
    name = message.json.name;
  } catch (e) {
    console.error('PubSub message was not JSON', e);
  }

Other, non-JSON payloads are contained in the Pub/Sub message as base64 encoded strings in the message object. To read a message like the following, you must decode the base64 encoded string as shown:

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

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

Access message attributes

Pub/Sub message can be sent with data attributes set in the publish command. For example, you could publish a message with a name attribute:

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

You can read such attributes from Message.attributes:

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

You might notice that some basic data such as the message ID or the message publish time are not available in Message.attributes. To work around this, you can access the triggering event's context.eventId and context.timestamp, with which you can determine when any message was published and differentiate one message from another. For 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);
});

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.