دليل بسيط لتثبيت واستخدام BullMQ في مشروع NestJS لمعالجة المهام الخلفية مثل إرسال البريد ومعالجة الصور دون إبطاء تطبيقك.
في هذا الدليل سأوضح كيفية تثبيت واستخدام BullMQ في مشروع NestJS. يُستخدم BullMQ لمعالجة المهام الخلفية مثل إرسال البريد ومعالجة الصور أو تشغيل مهام ثقيلة دون إبطاء تطبيقك.
عينة عمل: https://github.com/habilm/bullmq-nestjs
الخطوة 1: تثبيت الحزم المطلوبة
أولاً، ثبّت BullMQ وعميل Redis:
npm install bullmq ioredisالخطوة 2: إعداد Redis
يحتاج BullMQ إلى Redis ليعمل.
يمكنك:
تثبيت Redis محلياً
أو استخدام خدمة Redis سحابية
مثال (Redis محلي افتراضي):
host: localhost
port: 6379الخطوة 3: إنشاء طابور
أنشئ ملفاً مثل queue.ts:
import { Queue } from 'bullmq';
import { Redis } from 'ioredis';
const connection = new Redis({
host: 'localhost',
port: 6379,
});
export const emailQueue = new Queue('email-queue', {
connection,
});
الخطوة 4: إضافة مهمة للطابور
يمكنك إضافة مهام من خدمتك:
await emailQueue.add('send-email', {
to: 'test@example.com',
subject: 'Hello',
});الخطوة 5: إنشاء عامل (Worker)
يعالج العامل المهمة في الخلفية.
أنشئ worker.ts:
import { Worker } from 'bullmq';
import { Redis } from 'ioredis';
const connection = new Redis({
host: 'localhost',
port: 6379,
});
const worker = new Worker(
'email-queue',
async job => {
console.log('Processing job:', job.name);
console.log(job.data);
// مثال: منطق إرسال البريد هنا
},
{ connection },
);الخطوة 6: تشغيل العامل
شغّل العامل بشكل منفصل:
node worker.jsالخطوة 7: الاستخدام في خدمة NestJS
مثال خدمة:
import { Injectable } from '@nestjs/common';
import { emailQueue } from './queue';
@Injectable()
export class AppService {
async sendEmail() {
await emailQueue.add('send-email', {
to: 'user@gmail.com',
subject: 'Welcome',
});
}
}نصائح
شغّل العامل دائماً في عملية منفصلة
استخدم الطابور للمهام الثقيلة أو البطيئة
يمكنك إعادة محاولة المهام الفاشلة بخيارات BullMQ
استخدم عدة عمال لأداء أفضل
الخلاصة
الآن دمجت بنجاح BullMQ مع NestJS. هذا يساعد تطبيقك على البقاء سريعاً بنقل المهام الثقيلة إلى الخلفية.
يمكنك توسيع هذا لـ:
إرسال البريد
معالجة الصور
الإشعارات
مهام مزامنة البيانات
إذا أردت عرض جميع الطوابير وإدارتها في لوحة تحكم استخدم Bull Board


