Görev Saklama
Varsayılan olarak, bir görev Handler
tarafından başarıyla işlendikten sonra (yani Handler.ProcessTask
nil döndüğünde) görev kuyruktan kaldırılır. Ancak, görevin tamamlanmasından sonra (örneğin, inceleme amaçları için) görevin kuyrukta tutulmasını istiyorsanız, görev için bir saklama süresi belirtebilirsiniz.
Aşağıda, bir görevin tamamlanmasından sonra kuyrukta 24 saat boyunca saklanmasını belirten Retention
seçeneğini kullanmanın bir örneği bulunmaktadır.
// Görevi başlatırken seçeneği ayarlayın.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))
// Alternatif olarak, görevi kuyruğa alırken seçeneği ayarlayın.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
Bu seçeneği ayarladıktan sonra, tamamlanan görevleri CLI veya Web UI kullanarak görebilmelisiniz.
Görev Sonucu
Görev işlemi sırasında göreve ilişkin bazı verileri depolamanız gerekiyorsa ve bu verilere yalnızca görevin yaşam döngüsü boyunca (yani görev kuyruktan kaldırılana kadar) ihtiyaç duyuluyorsa, verileri görevle birlikte depolayabilirsiniz.
Verileri Redis'e yazmak ve yazılan verileri görevle ilişkilendirmek için ResultWriter
'ı kullanın.
Not: Redis'e yazılan veri miktarını dikkatlice düşünün. Büyük miktarda veri depolanması gerekiyorsa, SQL veritabanı gibi disk tabanlı bir depolama sistemi kullanmak daha iyidir.
// Handler kodunda.
func MyHandler(ctx context.Context, task *asynq.Task) error {
res, err := DoStuff(ctx, task)
if err != nil {
return fmt.Errorf("görev işlenemedi: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("görev sonucu yazılamadı: %v", err)
}
return nil
}
Yukarıdaki gibi Retention
seçeneğini kullandığınızda, sonuç verilerini CLI ve Web UI aracılığıyla görebileceksiniz. Ayrıca, Inspector.GetTaskInfo
ve Inspector.ListCompletedTasks
kullanarak sonuç verilerine programlı erişim sağlayabilirsiniz.