Catch up on everthing we announced at this year's Firebase Summit. Learn more

發布/訂閱觸發器

谷歌雲計算的發布/訂閱是一種全球分佈的消息總線自動縮放,你需要它。您可以創建一個函數,句柄酒吧/使用子事件functions.pubsub

觸發發布/訂閱功能

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

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

訪問發布/訂閱消息負載

對於發布/訂閱消息有效負載是從可訪問的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 負載作為消息對像中的 base64 編碼字符串包含在 Pub/Sub 消息中。要閱讀如下所示的消息,您必須對 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;

訪問消息屬性

可以使用發布命令中設置的數據屬性發送發布/訂閱消息。例如,你可以發布一個消息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);
});