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
پایهبار پیام Pub/Sub ازطریق شیء Message که به تابع شما برگردانده شده است قابلدسترسی است. برای پیامهایی که JSON در بدنه پیام Pub/Sub دارند، کیت توسعه نرمافزار 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);
});