Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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中不可用。要解決此問題,您可以在觸發事件的EventContext中訪問這些詳細信息。例如:

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