Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Pub/Sub triggers

Stay organized with collections Save and categorize content based on your preferences.

Google Cloud's Pub/Sub is a globally distributed message bus that automatically scales as you need it. You can create a function that handles Pub/Sub events by using 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 onMessagePublished() event handler:

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

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 = event.data.message.json.name;
  } catch (e) {
    logger.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 message = event.data.message;
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 = event.data.message.attributes.name;