مشغّلات 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);
});