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