دورة حياة المهمة

تمر المهام الغير متزامنة بحالات متعددة خلال دورتها الحياتية. تسجل هذه الصفحة دورة حياة المهمة من الإنشاء إلى الحذف.

عند قيد مهمة، يدير asynq المهمة داخليًا لضمان استدعاء المعالج في الوقت المحدد. خلال هذه العملية، قد تمر المهمة بحالات حياة مختلفة.

فيما يلي قائمة بالحالات المختلفة للدورة الحياة:

  • Scheduled: المهمة في انتظار المعالجة المستقبلية (ينطبق فقط على المهام مع الخيارات ProcessAt أو ProcessIn).
  • Pending: المهمة جاهزة للمعالجة وسيتم انتقاءها بواسطة عامل العمل الخالي.
  • Active: المهمة قيد المعالجة بواسطة عامل العمل (أي أن المعالج يقوم بمعالجة المهمة).
  • Retry: المعالج غير قادر على معالجة المهمة، والمهمة في انتظار محاولة مستقبلية.
  • Archived: وصلت المهمة إلى الحد الأقصى لمحاولات إعادة المحاولة وتم تخزينها في الأرشيف للفحص اليدوي.
  • Completed: تم معالجة المهمة بنجاح وسيتم الاحتفاظ بها حتى انتهاء وقت الاحتفاظ (ينطبق فقط على المهام مع الخيار Retention).

دعنا نلقي نظرة على الحالات المختلفة للدورة الحياة مع مثال.

// المهمة 1: مجدولة للمعالجة خلال 24 ساعة.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))

// المهمة 2: مُسجلة للمعالجة الفورية.
client.Enqueue(task2)

// المهمة 3: مُسجلة باستخدام خيار الاحتفاظ.
client.Enqueue(task3, asynq.Retention(2*time.Hour))

في هذا المثال، ستبقى المهمة 1 في الحالة Scheduled لل 24 ساعة القادمة. بعد ذلك، ستنتقل إلى الحالة Pending ثم إلى الحالة Active. إذا تم معالجة المهمة بنجاح، ستُحذف بيانات المهمة من Redis. إذا لم يتم معالجة المهمة بنجاح (أي أن المعالج يعيد خطأ أو يثير استثناء)، ستنتقل المهمة إلى الحالة Retry لإعادة المحاولات لاحقًا. بعد مدة زمنية، ستنتقل المهمة مجددًا إلى الحالة Pending ثم إلى الحالة Active. سيستمر هذا الدوران حتى يتم معالجة المهمة بنجاح أو حتى تنفد محاولات إعادة المحاولة. في الحالة الأخيرة، ستنتقل المهمة إلى الحالة Archived.

في هذا المثال، الاختلاف الوحيد بين المهمة 2 و المهمة 1 هو أن المهمة 2 تتجاوز الحالة Scheduled وتدخل مباشرة إلى الحالة Pending.

تم تسجيل المهمة 3 بخيار الاحتفاظ لمدة 2 ساعة. هذا يعني أنه بعد معالجة عامل العمل لـ المهمة 3 بنجاح، ستبقى المهمة في الحالة Completed لمدة 2 ساعة قبل إزالتها من الطابور. بشكل افتراضي، إذا لم تكن لدى مهمة خيار الاحتفاظ مُسجل، ستُزال من الطابور على الفور بعد الاكتمال.

الرسم البياني أدناه يوضح انتقالات الحالة.

+-------------+            +--------------+          +--------------+           +-------------+
|             |            |              |          |              | Success   |             |
|  Scheduled  |----------->|   Pending    |--------->|    Active    |---------> |  Completed  |
|  (Optional) |            |              |          |              |           |  (Optional) |
+-------------+            +--------------+          +--------------+           +-------------+
                                  ^                       |                            |
                                  |                       |                            | الحذف
                                  |                       | فشل                       |
                                  |                       |                            V
                                  |                       |
                                  |                       |
                           +------+-------+               |        +--------------+
                           |              |               |        |              |
                           |    Retry     |<--------------+------->|   Archived   |
                           |              |                        |              |
                           +--------------+                        +--------------+