عوامل تشغيل النشر/الاشتراك


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

تشغيل دالة pub/sub

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

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

الوصول إلى حمولة رسائل الناشر/الفرع {:#access-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 مع تحديد سمات البيانات في الأمر 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);
});