تخطَّ إلى المحتوى

الـ Background Jobs: طوابير ومهام مجدولة

الدرس 14 من 38

الهدف

بعد هالدرس تقدر تبني نظام background jobs بـ Inngest في Next.js — تشغّل event-driven jobs (بريد ترحيب بعد التسجيل) و cron jobs (تقرير يومي، تنظيف أسبوعي) — مع retry تلقائي لو فشل شي.

ليش هذا الحين؟

رفع الملفات جاهز — الحين نخلي الشغل الثقيل يصير ورا الكواليس. أكو عمليات المفروض ما تصير داخل الـ request — ترسل بريد إلكتروني، تولّد تقرير، تنظّف بيانات قديمة. هالعمليات لو سويتها في الـ API route، الـ request يتأخر أو يموت. الـ background job يشتغل بعيدا عن المستخدم، ويعيد المحاولة لو فشل — مو وجع للمستخدم، ومو وجع لك.

الفكرة

ليش ما تقدر تسوي background work في API route؟

الـ API route في Next.js (و Vercel) له timeout — عادة 10 ثوان على الـ Hobby plan. لو حاولت ترسل بريد وتولّد تقرير وتنظّف قاعدة البيانات كلها داخل route وحدة، إما تتأخر على المستخدم أو الـ request ينقطع. الـ background job ينفصل تماما عن الـ request.

Inngest: مكتبة للـ background jobs في Next.js. المفهوم بسيط: أنت تعرّف function، و Inngest يشغّلها لما يصير event معيّن (أو على cron). لو فشلت، يعيد المحاولة تلقائيا.

User signs up → API sends event to Inngest → Inngest runs welcome-email job
                                             (outside the request lifecycle)

أنواع الـ jobs:

النوع متى يشتغل مثال
Event-driven بعد حدث معيّن بريد ترحيب بعد التسجيل
Scheduled (cron) على وقت محدد تقرير يومي كل ساعة 8 صباحا
Step functions خطوات ورا بعض Onboarding flow

Retry logic: لو فشلت الـ function (مثلا: Resend كان down)، Inngest يعيد المحاولة تلقائيا — 3 مرات بـ exponential backoff. بدون ما تكتب أي كود إضافي.

محتاج مساعدة؟ راسلنا على mj@shakesbeard.net