جدولة الدوال


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