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


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

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

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

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

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