مشغّلات Pub/Sub (الجيل الأول)

Pub/Sub من Google Cloud هو ناقل رسائل موزَّع عالميًا يتوسّع تلقائيًا حسب الحاجة. يمكنك إنشاء دالة تعالج أحداث Pub/Sub باستخدام functions.pubsub.

تفعيل دالة Pub/Sub

يمكنك تفعيل دالة كلما تم إرسال رسالة Pub/Sub جديدة إلى موضوع محدّد. يجب تحديد اسم موضوع Pub/Sub الذي تريد أن يؤدي إلى تشغيل الدالة، وضبط الحدث ضمن معالج الأحداث onPublish():

exports.helloPubSub = functions.pubsub.topic('topic-name').onPublish((message) => {
  // ...
});

الوصول إلى حمولة رسائل Pub/Sub

يمكن الوصول إلى الحمولة لرسالة Pub/Sub من العنصر Message الذي تم إرجاعه إلى الدالة. بالنسبة إلى الرسائل التي تتضمّن JSON في نص رسالة Pub/Sub، تتضمّن حزمة تطوير البرامج (SDK) لـ 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);
});