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 觸發器

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

Google Cloud 的Pub/Sub是一種全球分佈式消息總線,可根據您的需要自動擴展。您可以使用 functions.pubsub 創建一個處理 Pub/Sub 事件的functions.pubsub

觸發發布/訂閱功能

每當向特定主題發送新的 Pub/Sub 消息時,您都可以觸發函數。您必須指定要觸發函數的 Pub/Sub 主題名稱,並在onPublish()事件處理程序中設置事件:

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

訪問發布/訂閱消息負載

Pub/Sub 消息的有效負載可從返回給您的函數的Message對象訪問。對於 Pub/Sub 消息正文中包含 JSON 的消息,適用於 Cloud Functions 的 Firebase SDK 具有用於解碼消息的輔助屬性。例如,以下是使用簡單 JSON 有效負載發布的消息:

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

您可以通過json屬性訪問這樣的 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);
  }

其他非 JSON 有效負載包含在 Pub/Sub 消息中,作為消息對像中的 base64 編碼字符串。要讀取如下消息,您必須解碼 base64 編碼的字符串,如下所示:

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

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

訪問消息屬性

可以使用發布命令中設置的數據屬性發送 Pub/Sub 消息。例如,您可以發布帶有name屬性的消息:

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

您可以從Message.attributes讀取此類屬性:

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

您可能會注意到一些基本數據,例如消息 ID 或消息發佈時間在Message.attributes中不可用。要解決此問題,您可以訪問觸發事件的context.eventIdcontext.timestamp ,您可以使用它們確定發布任何消息的時間並將一條消息與另一條消息區分開來。例如:

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