الاحتفاظ بالمهمة
بشكل افتراضي، بمجرد معالجة المهمة بنجاح بواسطة "المعالج" (أي أن "معالج المهمة" يُرجع "nil")، سيتم إزالة المهمة من الصف. ومع ذلك، إذا كنت ترغب في الاحتفاظ بالمهمة في الصف بعد الانتهاء (على سبيل المثال، لأغراض التفتيش)، يمكنك تحديد فترة الاحتفاظ بالمهمة.
فيما يلي مثال على استخدام خيار "الاحتفاظ" لتحديد أن المهمة يجب الاحتفاظ بها في الصف لمدة 24 ساعة بعد الانتهاء.
// قم بتعيين الخيار عند تهيئة المهمة.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))
// بالإضافة إلى ذلك، قم بتعيين الخيار عند إضافة المهمة إلى الصف.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
بعد تعيين هذا الخيار، يجب أن تتمكن من رؤية المهام المكتملة باستخدام واجهة سطر الأوامر أو واجهة المستخدم عبر الويب.
نتيجة المهمة
إذا كنت بحاجة إلى تخزين بعض البيانات المتعلقة بالمهمة أثناء معالجة المهمة، وإذا كانت هذه البيانات مطلوبة فقط أثناء دورة حياة المهمة (أي، حتى يتم إزالة المهمة من الصف)، يمكنك تخزين البيانات مع المهمة.
استخدم "ResultWriter" لكتابة البيانات إلى Redis وربط البيانات المكتوبة بالمهمة.
ملاحظة: يرجى النظر بعناية في كمية البيانات المكتوبة إلى Redis. إذا كان هناك حاجة لتخزين كمية كبيرة من البيانات، فمن الأفضل استخدام نظام تخزين يعتمد على القرص مثل قاعدة بيانات SQL.
// في كود المعالج.
func MyHandler(ctx context.Context, task *asynq.Task) error {
res, err := DoStuff(ctx, task)
if err != nil {
return fmt.Errorf("فشلت عملية معالجة المهمة: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("فشل كتابة نتيجة المهمة: %v", err)
}
return nil
}
إذا استخدمت خيار "الاحتفاظ" كما هو موضح أعلاه، ستتمكن من عرض بيانات النتيجة عبر واجهة سطر الأوامر وواجهة المستخدم عبر الويب. بالإضافة إلى ذلك، يمكنك الوصول إلى بيانات النتيجة برمجيًا من خلال استخدام "Inspector.GetTaskInfo" و "Inspector.ListCompletedTasks".