قوائم المهام لـ TypeScript: Bull وAgenda وBee-Queue

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

قوائم المهام لـ TypeScript: Bull وAgenda وBee-Queue



في تطبيقات الويب الحديثة بلغة TypeScript، غالبًا ما تنشأ الحاجة لتنفيذ عمليات كثيفة الاستخدام للموارد أو طويلة الأمد بشكل غير متزامن، دون حظر الخيط الرئيسي. قوائم المهام (Job Queues) هي نمط معماري مثبت يسمح بتأجيل تنفيذ المهام، وتوزيع الحمل بين العمال (workers)، وضمان موثوقية المعالجة. في هذه المقالة، سنستعرض ثلاث أدوات شائعة لـ TypeScript: Bull وAgenda وBee-Queue. ستتعرف على كيفية دمجها في مشروعك، ونقاط قوتها، والأداة المناسبة لكل سيناريو.



1. Bull — قائمة مهام قوية تعتمد على Redis



Bull هي على الأرجح المكتبة الأكثر شيوعًا لإدارة قوائم المهام في Node.js/TypeScript. تستخدم Redis كخلفية (backend)، مما يضمن أداءً عاليًا ومقاومة للأعطال. تدعم Bull أولويات المهام، وإعادة المحاولات، والتأخيرات، بالإضافة إلى سيناريوهات معقدة مع إيقاف واستئناف القائمة.



التثبيت:

npm install bullnpm install @types/bull  // لـ TypeScript


مثال بسيط لمنتج-مستهلك (producer-consumer):

import Queue from 'bull';

// إنشاء قائمة مهام باسم 'email'const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 6379 }});

// Producer: إضافة مهمةasync function sendWelcomeEmail(userId: string) { await emailQueue.add( { userId, type: 'welcome' }, { attempts: 3, backoff: 2000 } // 3 محاولات مع تأخير 2 ثانية );}

// Consumer: معالجة المهمةemailQueue.process(async (job) => { const { userId, type } = job.data; console.log(`إرسال بريد ${type} إلى المستخدم ${userId}`); // هنا منطق إرسال البريد الإلكتروني});


توفر Bull أيضًا واجهة مراقبة (UI) مريحة عبر bull-board أو bull-repl، مما يسهل التصحيح في بيئة الإنتاج.



2. Agenda — قائمة مهام مرنة مع دعم الجداول الزمنية



Agenda هي مكتبة تستخدم MongoDB كمخزن. ميزتها الرئيسية هي الدعم المدمج للمهام الدورية (جداول زمنية تشبه cron) وواجهة برمجة تطبيقات (API) مريحة لتحديد المهام المتكررة. Agenda مناسبة تمامًا للمهام التي يجب تنفيذها وفقًا لجدول زمني: تنظيف قاعدة البيانات، إنشاء التقارير، إرسال النشرات البريدية.



التثبيت:

npm install agendanpm install @types/agenda


مثال استخدام مع جدول زمني:

import Agenda from 'agenda';

const agenda = new Agenda({ db: { address: 'mongodb://localhost:27017/agenda-example' }});

// تعريف المهمةagenda.define('send weekly report', async (job) => { const { department } = job.attrs.data; console.log(`إنشاء تقرير أسبوعي لقسم ${department}`);});

// تشغيل الوكيل (agent) وجدولة المهمة(async () => { await agenda.start(); // التنفيذ كل يوم جمعة الساعة 18:00 await agenda.every('0 18 * * 5', 'send weekly report', { department: 'IT' });})();


تدعم Agenda الأولويات، وإعادة المحاولات، والإغلاق الآمن (graceful shutdown). ومع ذلك، فهي أقل أداءً من Bull بسبب استخدام MongoDB بدلاً من Redis.



3. Bee-Queue — قائمة مهام خفيفة وسريعة



Bee-Queue هي قائمة مهام بسيطة تعتمد على Redis، وتركز على أقصى أداء وحجم صغير للكود. لا تدعم وظائف معقدة مثل الأولويات أو الجداول الزمنية، لكنها مثالية للسيناريوهات البسيطة حيث تكون السرعة وانخفاض استهلاك الذاكرة مهمين.



التثبيت:

npm install bee-queuenpm install @types/bee-queue


مثال على العمل:

import Bee from 'bee-queue';

const imageQueue = new Bee('image-processing', { redis: { host: 'localhost', port: 6379 }});

// ProducerimageQueue.createJob({

توصيات