Pemeliharaan Tugas
Secara default, setelah sebuah tugas berhasil diproses oleh Handler
(misalnya, Handler.ProcessTask
mengembalikan nilai-nilai kosong), tugas tersebut akan dihapus dari antrian. Namun, jika Anda ingin tugas tetap ada di antrian setelah selesai (misalnya, untuk tujuan inspeksi), Anda dapat menentukan periode pemeliharaan untuk tugas tersebut.
Berikut ini adalah contoh penggunaan opsi Retention
untuk menentukan bahwa sebuah tugas harus dipelihara di antrian selama 24 jam setelah selesai.
// Atur opsi saat menginisialisasi tugas.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))
// Sebagai alternatif, atur opsi saat mengantrikan tugas.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
Setelah mengatur opsi ini, Anda seharusnya dapat melihat tugas yang telah selesai menggunakan CLI atau Web UI.
Hasil Tugas
Jika Anda perlu menyimpan beberapa data yang terkait dengan tugas selama pemrosesan tugas, dan jika data ini hanya diperlukan selama siklus hidup tugas (misalnya, sampai tugas dihapus dari antrian), Anda dapat menyimpan data tersebut bersama dengan tugas.
Gunakan ResultWriter
untuk menulis data ke redis dan mengaitkan data yang ditulis dengan tugas.
Catatan: Pertimbangkan secara cermat jumlah data yang ditulis ke redis. Jika perlu menyimpan sejumlah besar data, lebih baik menggunakan sistem penyimpanan berbasis disk seperti database SQL.
// Dalam kode handler.
func MyHandler(ctx context.Context, task *asynq.Task) error {
res, err := DoStuff(ctx, task)
if err != nil {
return fmt.Errorf("gagal memproses tugas: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("gagal menulis hasil tugas: %v", err)
}
return nil
}
Jika Anda menggunakan opsi Retention
seperti yang ditunjukkan di atas, Anda akan dapat melihat data hasil melalui CLI dan Web UI. Selain itu, Anda dapat mengakses data hasil secara berpola melalui penggunaan Inspector.GetTaskInfo
dan Inspector.ListCompletedTasks
.