Görev Süresi Aşımı
Bu sayfada bir görev için zaman aşımı veya son tarih belirlemeyi ve iptal işlemlerini nasıl ele alacağımızı tanıtacağım.
Client
kullanarak bir görevi kuyruğa eklerken, İstasyon
veya Son Tarih
seçeneğini belirtebilirsiniz. Bu, görevin zaman aşımı veya son tarihten önce işlenmemesi durumunda sunucunun görevden vazgeçmesine ve diğer görevler için kaynakları geri almasına olanak tanır. Bu seçenekler, context.Context
'in zaman aşımını veya son tarihini ayarlar ve bunu başlangıçtaki birinci parametre olarak işleyicinize geçirir.
*Not: Zaman aşımı, işleyiciniz göreve işlemeye başladığı zamana göre belirlenir.
Örneğin, 30 saniye içinde tamamlanması gereken bir göreviniz varsa, zaman aşımını 30*time.Second
olarak ayarlayabilirsiniz.
c := asynq.NewClient(asynq.RedisClientOpt{Addr: ":6379"})
err := c.Enqueue(görev, asynq.İstasyon(30*time.Second))
Belirli bir zamana kadar tamamlanması gereken bir göreviniz varsa, görev için son tarih belirleyebilirsiniz.
Örneğin, 2020-12-25
tarihinden önce tamamlanması gereken bir göreviniz varsa, bunu Son Tarih
seçeneği olarak iletebilirsiniz.
xmas := time.Date(2020, time.December, 25, 0, 0, 0, 0, time.UTC)
err := c.Enqueue(görev, asynq.SonTarih(xmas))
İşleyicilerde Görev Bağlamı
İstasyon
ve Son Tarih
seçeneklerini kullanarak bir görev oluşturduktan sonra, bu değeri okuyarak Done
kanalına saygı duymalıyız.
Handler
'a geçirilen ilk parametre context.Context
'tir. İşleyicinizi, bağlamdan iptal sinyali aldığında çalışmayı durduran bir şekilde yazmalısınız.
func benimİşleyicim(ctx context.Context, görev *asynq.Görev) error {
c := make(chan error, 1)
go func() {
c <- işiYap(görev)
}()
select {
case <-ctx.Done():
// İptal sinyali alındı, bu işi terk edin.
return ctx.Err()
case res := <-c:
return res
}
}
CLI Aracılığıyla Görevlerin İptali
asynq
CLI'sında, etkin bir görevin kimliğini iptal edebilen bir iptal
komutu bulunmaktadır.
Mevcut etkin görevleri kontrol etmek ve iptal edilecek görevin kimliğini almak için çalışanlar
komutunu kullanabilirsiniz.
asynq görev ls --kuyruk=myqueue --durum=aktif
asynq görev iptal [görev_id]