إذا أردت جدولة تنفيذ الدوال في أوقات محدّدة، يمكنك استخدام
معالِج onSchedule
لإنشاء موضوع
Pub/Sub يستخدم Cloud Scheduler لتشغيل أحداث
حول ذلك الموضوع.
قبل البدء
لاستخدام هذا الحلّ في مشروعك على Firebase، يجب أن يكون مشروعك مُدرَجًا في خطة أسعار Blaze. إذا لم تكن خطتك مشتركة في خطة Blaze، يمكنك ترقية خطة الأسعار.
على الرغم من أنّ الفوترة مطلوبة، يمكنك توقّع أن تكون التكلفة الإجمالية قابلة للإدارة، لأنّه تبلغ تكلفة كل مهمة Cloud Scheduler 0.10 دولار أمريكي (أو ما يعادله بالعملة المحلية) في الشهر، وهناك إذن بثلاث مهام لكل حساب على Google بدون أي رسوم. استخدِم حاسبة أسعار Blaze لإنشاء تقدير للتكلفة استنادًا إلى معدّل الاستخدام المتوقّع.
يجب تفعيل واجهات برمجة التطبيقات Pub/Sub وCloud Scheduler لمشروعك. من المفترض أن تكون هذه الإعدادات مفعّلة في معظم مشاريع Firebase، ويمكنك التحقّق من ذلك في وحدة تحكّم Google Cloud.
كتابة دالة مُجدوَلة
في Cloud Functions for Firebase، يكون منطق الجدولة مضمّنًا في رمز الدوال،
بدون أي متطلبات خاصة في وقت النشر. لإنشاء دالة مجدوَلة،
استخدِم functions.pubsub.schedule('your schedule').onRun((context))
.
على سبيل المثال، لتشغيل دالة كل
خمس دقائق باستخدام بنية App Engine cron.yaml
، يمكنك إجراء ما يلي:
exports.scheduledFunction = functions.pubsub.schedule('every 5 minutes').onRun((context) => {
console.log('This will be run every 5 minutes!');
return null;
});
يتوافق كل من بنية Unix Crontab وApp Engine مع Cloud Scheduler. على سبيل المثال، لاستخدام Crontab لاختيار منطقة زمنية معيّنة لتشغيل دالة مجدوَلة، يمكنك إجراء ما يلي:
exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
.timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
.onRun((context) => {
console.log('This will be run every day at 11:05 AM Eastern!');
return null;
});
يجب أن تكون قيمة timeZone
اسم منطقة زمنية من قاعدة بيانات tz. اطّلِع على
مرجع Cloud Scheduler
لمزيد من المعلومات حول السمات المتوافقة.
نشر دالة مجدوَلة
عند نشر دالة مجدولة، يتم إنشاء مهمة الجدولة ذات الصلة وموضوع pub/sub تلقائيًا. تُعيد واجهة سطر أوامر Firebase عرض اسم الموضوع، ويمكنك عرض المهمة والموضوع في Google Cloud Console. يتمّ تسمية الموضوع وفقًا للاصطلاح التالي:
firebase-scheduled-function_name-region
على سبيل المثال:
firebase-scheduled-scheduledFunctionCrontab-us-east1.