ה-Pub/Sub של Google Cloud הוא אפיק הודעות המופץ באופן גלובלי שמתרחב אוטומטית לפי הצורך. ניתן ליצור פונקציה המטפלת באירועי Pub/Sub באמצעות functions.pubsub
.
הפעל פונקציית פאב/משנה
אתה יכול להפעיל פונקציה בכל פעם שהודעת Pub/Sub חדשה נשלחת לנושא ספציפי. עליך לציין את שם הנושא Pub/Sub שברצונך להפעיל את הפונקציה שלך, ולהגדיר את האירוע בתוך מטפל האירועים onPublish()
:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
גש למטען הפאב/המשנה של הודעת המשנה {:#access-pub/sub}
המטען עבור הודעת 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;
גישה למאפייני הודעה {:#access-message}
ניתן לשלוח הודעת 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
. כדי לעקוף זאת, תוכל לגשת לפרטים האלה ב- 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);
});