جدولة الدوال


إذا كنت تريد جدولة الدوالّ لتشغيلها في أوقات محدّدة، استخدِممعالج 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;
});

يتوافق Cloud Scheduler مع تنسيقات Unix Crontab وApp Engine. على سبيل المثال، لاستخدام 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 لمزيد من المعلومات حول السمات المتوافقة.

نشر دالة مجدوَلة

عند نشر دالة مجدوَلة، يتم تلقائيًا إنشاء وظيفة المجدول ذات الصلة ومجال النشر/الاشتراك. تُعيد واجهة سطر أوامر Firebase عرض اسم الموضوع، ويمكنك عرض المهمة والموضوع في Google Cloud Console. يتمّ تسمية الموضوع وفقًا للاصطلاح التالي:

firebase-scheduled-function_name-region

على سبيل المثال:

firebase-scheduled-scheduledFunctionCrontab-us-east1.