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


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

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

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

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

الوصول إلى حمولة رسائل الناشر/الفرع {:#access-pub/sub}

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

يمكن إرسال رسالة النشر/الاشتراك مع تعيين سمات البيانات في أمر نشر. على سبيل المثال، يمكنك نشر رسالة باستخدام 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);
});