مشغِّلات النشر/الاشتراك


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

تشغيل دالة النشر/الاشتراك

يمكنك تشغيل دالة كلما تم إرسال رسالة 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، تحتوي حزمة تطوير البرامج (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;

الوصول إلى سمات الرسالة {:#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);
});