מפעילי פאב/משנה

ה- Pub/Sub של Google Cloud הוא אפיק הודעות המופץ ברחבי העולם, שמתרחב אוטומטית לפי הצורך. ניתן ליצור פונקציה המטפלת באירועי Pub/Sub באמצעות functions.pubsub .

הפעל פונקציית פאב/משנה

אתה יכול להפעיל פונקציה בכל פעם שהודעת Pub/Sub חדשה נשלחת לנושא ספציפי. עליך לציין את שם הנושא Pub/Sub שברצונך להפעיל את הפונקציה שלך, ולהגדיר את האירוע בתוך מטפל האירועים onPublish() :

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

גש למטען הפאב/משנה של הודעות

המטען עבור הודעת Pub/Sub נגיש מאובייקט Message שהוחזר לפונקציה שלך. עבור הודעות עם JSON בגוף הודעת Pub/Sub, ל-Firebase SDK for Cloud Functions יש מאפיין עוזר לפענוח ההודעה. לדוגמה, הנה הודעה שפורסמה עם מטען 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;

ייתכן שתבחין שחלק מהנתונים הבסיסיים כגון מזהה ההודעה או זמן פרסום ההודעה אינם זמינים ב- Message.attributes . כדי לעקוף זאת, תוכל לגשת ל- context.timestamp ו- context.eventId של האירוע המפעיל, שבאמצעותם תוכל לקבוע מתי פורסמה הודעה כלשהי ולהבדיל בין הודעה אחת לאחרת. לדוגמה:

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