Görev Yaşam Döngüsü
Asenkron görevler, yaşam döngüleri boyunca birden fazla durumdan geçer. Bu sayfa, bir görevin oluşturulmasından silinmesine kadar olan görev yaşam döngüsünü kaydeder.
Bir görevi kuyruğa gönderdiğinizde, asynq, belirtilen zamanda işlemin gerçekleştirilmesini sağlamak için görevi dahili olarak yönetir. Bu süreçte görev, farklı yaşam döngüsü durumlarından geçebilir.
İşte farklı yaşam döngüsü durumlarının listesi:
-
Zamanlanmış: Görev, gelecekteki bir işleme bekliyor (yalnızca
ProcessAt
veyaProcessIn
seçeneklerine sahip görevler için geçerlidir). - Beklemede: Görev işlem için hazır ve boşta olan bir çalışan tarafından alınacak.
- Aktif: Görev, bir çalışan tarafından işleniyor (yani, işleyici görevi işliyor).
- Yeniden Deneme: Çalışan, görevi işleyemiyor ve görev, gelecekteki bir yeniden deneme için bekliyor.
- Arşivlenmiş: Görev, maksimum yeniden deneme girişimine ulaştı ve manuel inceleme için arşivde saklanıyor.
-
Tamamlandı: Görev başarıyla işlendi ve süre bitene kadar saklanacak (yalnızca
Retention
seçeneğine sahip görevler için geçerlidir).
Şimdi farklı yaşam döngüsü durumlarına bir örnek ile bakalım.
// Görev 1: 24 saat içinde işlem için zamanlanmış.
client.Enqueue(görev1, asynq.ProcessIn(24*time.Hour))
// Görev 2: Hemen işlem için kuyruğa alındı.
client.Enqueue(görev2)
// Görev 3: Saklama seçeneği ile kuyruğa alındı.
client.Enqueue(görev3, asynq.Retention(2*time.Hour))
Bu örnekte, Görev 1
önümüzdeki 24 saat boyunca Zamanlanmış durumunda kalacak. 24 saat sonra, Beklemede durumuna geçecek ve ardından Aktif duruma geçecek. Görev başarıyla işlenirse, görev verisi Redis'ten silinecektir. Eğer görev başarılı bir şekilde işlenmezse (yani, işleyici bir hata döndürür veya panik yaparsa), görev ileri yeniden denemeler için Yeniden Deneme durumuna geçecektir. Bir belirli bir süre sonra, görev Beklemede durumuna ve ardından Aktif durumuna geçecektir. Bu döngü, görev başarıyla işlenene kadar veya yeniden deneme girişimlerini tüketene kadar devam edecektir. Son durumda, görev Arşivlenmiş durumuna geçecektir.
Bu örnekte, Görev 2
ve Görev 1
arasındaki tek fark, Görev 2
'nin Zamanlanmış durumu atlayıp doğrudan Beklemede durumuna girmesidir.
Görev 3
, 2 saatlik bir saklama seçeneği ile kuyruğa alınmıştır. Bu, bir çalışanın Görev 3
'ü başarıyla işledikten sonra, görevin kuyrukta kaldığı Tamamlandı durumunda 2 saat kalacağı anlamına gelir. Varsayılan olarak, bir görevin saklama seçeneği belirlenmemişse, görev tamamlanır tamamlanmaz hemen kuyruktan kaldırılacaktır.
Aşağıdaki diyagram, durum geçişlerini göstermektedir.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Başarıyla | |
| Zamanlanmış |----------->| Beklemede |--------->| Aktif |---------> | Tamamlandı |
| (Opsiyonel) | | | | | | (Opsiyonel) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Silme
| | Başarısız |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Yeniden |<--------------+------->| Arşivlenmiş|
| Deneme | | |
+--------------+ +--------------+