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