Pub/Sub Google Cloud یک گذرگاه پیام توزیعشدهی جهانی است که بهطور خودکار بسته به نیاز شما مقیاسپذیر میشود. میتوانید با استفاده از functions.pubsub
تابعی ایجاد کنید که رویدادهای Pub/Sub را مدیریت کند.
فعال کردن یک تابع pub/sub
شما میتوانید هر زمان که یک پیام Pub/Sub جدید به یک موضوع خاص ارسال میشود، یک تابع را فعال کنید. شما باید نام موضوع Pub/Sub که میخواهید تابع شما روی آن فعال شود را مشخص کنید و رویداد را در داخل کنترلکننده رویداد onPublish()
تنظیم کنید:
exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => { // ... });
دسترسی به محتوای پیام pub/sub
بار مفید (payload) پیام Pub/Sub از شیء Message
که به تابع شما برگردانده میشود، قابل دسترسی است. برای پیامهایی که در بدنه پیام Pub/Sub از نوع JSON هستند، 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 را میتوان با ویژگیهای دادهای که در دستور publish تنظیم شدهاند، ارسال کرد. برای مثال، میتوانید پیامی را با ویژگی 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);
});