حفظ وظیفه
به طور پیشفرض، یکباری که یک وظیفه با موفقیت توسط Handler
پردازش شود (به عبارت دیگر، Handler.ProcessTask
مقدار nil برگرداند)، وظیفه از صف حذف خواهد شد. با این حال، اگر میخواهید وظیفه پس از اتمام (برای مثال، برای اغراق نمایشی) در صف نگهداری شود، میتوانید یک دوره نگهداری برای وظیفه مشخص کنید.
در زیر مثالی از استفاده از گزینه Retention
برای مشخص کردن اینکه یک وظیفه باید برای 24 ساعت پس از انجام در صف نگهداری شود، آمده است.
// تنظیم گزینه هنگام مقداردهی اولیه وظیفه.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))
// به طور جایگزین، تنظیم گزینه هنگام قرار دادن وظیفه در صف.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
بعد از تنظیم این گزینه، میتوانید وظایف انجام شده را از طریق رابط خط فرمان یا رابط کاربری وب مشاهده کنید.
نتیجه وظیفه
اگر به دنبال ذخیرهسازی برخی از دادههای مرتبط با وظیفه در حین پردازش وظیفه هستید و اگر این دادهها تنها در طول دوره عمر وظیفه مورد نیاز است (به عبارت دیگر، تا زمانی که وظیفه از صف حذف میشود)، میتوانید دادهها را همراه با وظیفه ذخیره کنید.
استفاده از ResultWriter
برای نوشتن داده به ردیس و همبستهسازی داده نوشته شده با وظیفه.
توجه: لطفاً میزان دادهای که به ردیس نوشته میشود را با دقت در نظر بگیرید. اگر مقدار زیادی داده باید ذخیره شود، بهتر است از یک سیستم ذخیرهسازی مبتنی بر دیسک مانند پایگاه داده SQL استفاده کنید.
// در کد هندلر.
func MyHandler(ctx context.Context, task *asynq.Task) error {
res, err := DoStuff(ctx, task)
if err != nil {
return fmt.Errorf("failed to process task: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("failed to write task result: %v", err)
}
return nil
}
اگر گزینه Retention
را مانند مثال بالا استفاده کنید، خواهید توانست داده نتایج را از طریق رابط خط فرمان و رابط کاربری وب مشاهده کنید. به علاوه، میتوانید به صورت برنامهریزیشده از طریق استفاده از Inspector.GetTaskInfo
و Inspector.ListCompletedTasks
به داده نتایج دسترسی داشته باشید.