قوائم المهام في Node.js: Bull و Bee-Queue و Kue

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

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

ابدأ الدورة

قوائم المهام لجافا سكريبت (Node.js): Bull و Bee-Queue و Kue



عند تطوير تطبيقات الويب على Node.js، غالبًا ما تنشأ الحاجة لتنفيذ عمليات طويلة أو كثيفة الاستخدام للموارد بشكل غير متزامن، دون حظر التدفق الرئيسي لمعالجة الطلبات. الأمثلة النموذجية: إرسال إشعارات البريد الإلكتروني، معالجة الصور المرفوعة، إنشاء تقارير PDF أو المزامنة مع واجهات برمجة التطبيقات الخارجية. لحل هذه المهام، يتم استخدام قوائم المهام (job queues) - وهي آلية تسمح بتأجيل تنفيذ العمل، وتوزيع الحمل، وضمان تحمل الأخطاء.



في هذه المقالة، سنستعرض ثلاث مكتبات شائعة لإدارة قوائم المهام في نظام Node.js البيئي: Bull و Bee-Queue و Kue. لكل منها ميزاتها ومزاياها وسيناريوهات استخدامها الخاصة.



لماذا نحتاج إلى قوائم المهام؟



الأسباب الرئيسية لدمج قوائم المهام في الواجهة الخلفية على Node.js:

  • تفريغ التدفق الرئيسي. العمليات الطويلة (مثل إرسال 1000 رسالة بريد إلكتروني) لا تمنع استجابة المستخدم.
  • محاولات إعادة المحاولة. إذا فشلت المهمة بسبب خطأ، ستعيد قائمة المهام محاولتها تلقائيًا بعد فترة زمنية محددة.
  • الجدولة. يمكن تأجيل تنفيذ المهمة إلى وقت محدد (مثل بعد ساعة واحدة).
  • قابلية التوسع. يمكن للعديد من العمال معالجة المهام من قائمة واحدة بالتوازي.


1. Bull - قائمة مهام حديثة وعالية الأداء



Bull هي واحدة من أشهر المكتبات للعمل مع قوائم المهام في Node.js. وهي مبنية على Redis وتوفر واجهة برمجة تطبيقات غنية لإدارة المهام.



الإمكانيات الرئيسية لـ Bull:

  • دعم أولويات المهام.
  • محاولات إعادة محاولة قابلة للتخصيص (retries).
  • بدء مؤجل (delay).
  • الأحداث (اكتمال المهمة، خطأ، تقدم).
  • واجهة مستخدم مدمجة للمراقبة عبر bull-board.


التثبيت:

npm install bull


مثال على إنشاء قائمة مهام ومعالج:

const Queue = require('bull');

// إنشاء قائمة مهام لإرسال البريد الإلكترونيconst emailQueue = new Queue('email', { redis: { host: '127.0.0.1', port: 6379 }});

// إضافة مهمة إلى القائمةemailQueue.add({ to: 'user@example.com', subject: 'مرحباً!', body: 'هذه رسالة اختبارية'}, { attempts: 3, // إعادة المحاولة حتى 3 مرات عند الخطأ delay: 5000 // تأجيل لمدة 5 ثوانٍ});

// معالج المهامemailQueue.process(async (job) => { const { to, subject, body } = job.data; // محاكاة إرسال البريد الإلكتروني await sendEmail(to, subject, body); console.log(`تم إرسال البريد الإلكتروني إلى: ${to}`);});


متى تختار Bull: إذا كنت بحاجة إلى قائمة مهام موثوقة مع ميزات متقدمة (أولويات، محاولات إعادة، مراقبة) وكنت مستعدًا لاستخدام Redis.



2. Bee-Queue - خفيفة وسريعة



Bee-Queue هي قائمة مهام بسيطة، تعمل أيضًا على Redis. وهي موجهة نحو البساطة والأداء. كود المكتبة مضغوط، وواجهة برمجة التطبيقات بديهية.



ميزات Bee-Queue:

  • لا توجد تبعيات باستثناء Redis.
  • دعم الأحداث (جاهز، نجاح المهمة، فشل المهمة).
  • إمكانية ضبط مهلة المعالجة.
  • نظام بسيط لمحاولات إعادة المحاولة.


التثبيت:

npm install bee-queue


مثال على الاستخدام:

const Queue = require('bee-queue');

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

// إضافة مهمةimageQueue.createJob({ imagePath: '/uploads/photo.jpg' }) .retries(2) .save();

// معالجimageQueue.process(async (job) => { const {

توصيات