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.