محرک های Pub/Sub


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);
});