محرک‌های Pub/Sub (نسل اول)

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