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);
});