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]