Siklus Tugas
Tugas asinkron melewati beberapa tahapan selama siklus hidupnya. Halaman ini mencatat siklus hidup suatu tugas dari pembuatan hingga penghapusan.
Ketika Anda mendaftarkan suatu tugas, asynq mengelola tugas secara internal untuk memastikan bahwa penangan dipanggil pada waktu yang ditentukan. Selama proses ini, tugas dapat melewati berbagai tahapan siklus hidup.
Berikut adalah daftar berbagai tahapan siklus hidup:
-
Dijadwalkan: Tugas menunggu untuk diproses di masa depan (hanya berlaku untuk tugas dengan opsi
ProcessAt
atauProcessIn
). - Menunggu: Tugas sudah siap untuk diproses dan akan diambil oleh pekerja yang tidak sibuk.
- Aktif: Tugas sedang diproses oleh seorang pekerja (yaitu, penangan sedang memproses tugas tersebut).
- Ulang: Pekerja tidak dapat memproses tugas, dan tugas menunggu untuk diulang di masa depan.
- Diarsipkan: Tugas telah mencapai jumlah upaya pengulangan maksimum dan disimpan di arsip untuk pemeriksaan manual.
-
Selesai: Tugas telah diproses dengan sukses dan akan tetap disimpan sampai waktu retensi berakhir (hanya berlaku untuk tugas dengan opsi
Retention
).
Mari kita lihat berbagai tahapan siklus hidup dengan contoh.
// Tugas 1: Dijadwalkan untuk diproses dalam 24 jam.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))
// Tugas 2: Didaftarkan untuk diproses segera.
client.Enqueue(task2)
// Tugas 3: Didaftarkan dengan opsi retensi.
client.Enqueue(task3, asynq.Retention(2*time.Hour))
Dalam contoh ini, Tugas 1
akan tetap berada dalam tahapan Dijadwalkan selama 24 jam ke depan. Setelah 24 jam, tugas akan berpindah ke tahapan Menunggu dan kemudian ke tahapan Aktif. Jika tugas berhasil diproses, data tugas akan dihapus dari Redis. Jika tugas tidak diproses dengan sukses (yaitu, penangan mengembalikan kesalahan atau terjadi kesalahan fatal), tugas akan berpindah ke tahapan Ulang untuk dicoba kembali di masa depan. Setelah periode waktu, tugas akan kembali ke tahapan Menunggu dan kemudian ke tahapan Aktif. Siklus ini akan terus berlanjut sampai tugas berhasil diproses atau menghabiskan upaya pengulangan. Dalam kasus terakhir, tugas akan berpindah ke tahapan Diarsipkan.
Perbedaan utama antara Tugas 2
dan Tugas 1
hanyalah Tugas 2
langsung masuk ke tahapan Menunggu tanpa melewati tahapan Dijadwalkan.
Tugas 3
didaftarkan dengan opsi retensi selama 2 jam. Ini berarti setelah seorang pekerja berhasil memproses Tugas 3
, tugas akan tetap berada dalam tahapan Selesai selama 2 jam sebelum dihapus dari antrian. Secara default, jika tugas tidak memiliki opsi retensi yang diatur, tugas akan dihapus dari antrian segera setelah selesai.
Diagram di bawah ini mengilustrasikan transisi tahapan.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Sukses | |
| Dijadwalkan |----------->| Menunggu |--------->| Aktif |---------> | Selesai |
| (Opsional) | | | | | | (Opsional) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Penghapusan
| | Gagal |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Ulang |<--------------+------->| Diarsipkan |
| | | |
+--------------+ +--------------+