سؤال

أنا أتساءل، هل هناك طريقة لتنفيذ مهام الخلفية، ربما مع تجمع العمال.هل يمكنك أن تريني الاتجاه، فأنا أفكر في كتابة حزمة لهذا؟

هل كانت مفيدة؟

المحلول

تحديث 2019

قبل التفكير في كتابة حزمة لأي شيء، انظر أولاً إذا كانت هناك حزم موجودة تفعل ما تحتاجه.في عالم Meteor، هذا يعني البحث في Atmosphere عن حزم "الوظيفة/قائمة الانتظار/المهمة/إدارة العمال/الجدولة"، ثم على npm لنفس مصطلحات البحث.تحتاج أيضًا إلى تحديد متطلباتك بشكل أكثر دقة:

  • هل تريد المثابرة أم أن الحل الموجود في الذاكرة سيعمل؟
  • هل تريد أن تكون قادرًا على توزيع الوظائف على أجهزة مختلفة؟

خاص بالنيزك

  • جمع الوظائف - موثوق (استخدمته في عام 2014 في الإنتاج عند بدء التشغيل)، ولكنه حاليًا في وضع الصيانة.يتيح لك جدولة المهام المستمرة ليتم تشغيلها في أي مكان (الخوادم والعملاء).
  • ستيف جوبز - تمت صيانته بنشاط بواسطة ماكس سافين، مؤلف العديد من الكتب أدوات نيزك قوية
  • Littledata:synced-cron - "نظام كرون بسيط للنيزك.وهو يدعم مزامنة المهام بين عمليات متعددة."

الحزم المهجورة:

حزم Npm

لقد كان Meteor قادرًا على استخدام حزم npm مباشرةً لعدة سنوات حتى الآن، لذا فإن هذا السؤال يعد بمثابة اكتشاف حزم إدارة الوظيفة/العامل/قائمة الانتظار على NPM.إذا كنت لا تهتم بالمثابرة:

  • غير متزامن "يوفر حوالي 70 وظيفة تشمل المشتبه بهم "الوظيفيين" المعتادين (map, reduce, filter, each...) بالإضافة إلى بعض الأنماط الشائعة لتدفق التحكم غير المتزامن (parallel, series, waterfall...)"
  • d3-queue - أضيق الحدود، كتبه مؤلف D3 مايك بوستوك

إذا كنت تريد المثابرة، نظرًا لأن Meteor يستخدم MongoDB بالفعل، فقد يكون من المفيد استخدام حزمة جدولة المهام مع الاستمرارية في MongoDb.يبدو أن الأقوى والأكثر شعبية هو جدول أعمال, ، ولكن لسوء الحظ لم تتم صيانتها منذ أشهر، ولديها تراكم كبير من مشاكل.

إذا كنت على استعداد لإضافة تبعية مدعومة بـ redis لمشروعك، هناك المزيد من الخيارات:

مثل MongoDB، يمكن لـ Redis أيضًا توفير التوفر العالي (عبر Redis Sentinel)، وإذا كنت ترغب في توزيع الوظائف بين أجهزة عاملة متعددة، فيمكنك ذلك قم بتوجيههم جميعًا إلى نفس خادم Redis.

نصائح أخرى

توجد حزمة تعتمد على وظائف Cron والتي يمكن استخدامها لجدولة المهام على فترات أو تواريخ معينة.هنا هي الحزمة: https://atmosphere.meteor.com/package/cron

وإذا بحثت في مصدر تلك الحزمة، ستلاحظ أنهم ببساطة يستخدمون:

Meteor.setInterval( ... , delay );

لذا، إذا قمت بحفظ مهامك في قاعدة بيانات، ثم قمت بتحميلها على فترات زمنية أثناء بدء التشغيل، فمن المحتمل أن تكون على المسار الصحيح.

إذا كنت تبحث عن شيء محدد نيزك، فأنا سعيد بمشاركة هناك حزمة جديدة تسمى ستيف جوبز.يجعل تشغيل وظائف الخلفية سهلا مثل استدعاء الأسلوب.

لديه كل الميزات القياسية التي تتوقعها، مثل تشغيل وظيفة مرة واحدة فقط، وإعادة المحاولة الوظائف الفاشلة، وهلم جرا.يمكنك معرفة المزيد حول هذا الموضوع على GitHub:

http://github.com/msavin/stevevevobs

أعتقد أن الدعم المناسب موجود في خارطة الطريق الخاصة بهم، ولكن في هذه الأثناء تمكنت من الحصول عليه بطريقة مخترقة عبر setInterval.انظر علامة كرون طَرد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top