Genel Bakış
Sunucu
ile eş zamanlı olarak Zamanlayıcıyı
çalıştırarak görevleri periyodik olarak yönetebilirsiniz. Zamanlayıcı periyodik olarak görevleri kuyruğa ekleyecek ve ardından kümedeki uygun sunucular tarafından yürütülecektir.
Her zamanlama için yalnızca bir Zamanlayıcının çalıştığından emin olmalısınız, böylece çift görevlerden kaçınılır. Merkezi bir yaklaşım kullanmak, senkronizasyon gerektirmediği anlamına gelir ve hizmet kilitler kullanmadan çalışabilir.
Dinamik olarak periyodik görevler eklemek ve kaldırmak istiyorsanız, ZamanlanmışGörevYöneticisi
ni doğrudan Zamanlayıcı
yı kullanmak yerine kullanın. Daha detaylı bilgi için bu wikiye göz atın.
Zaman Dilimi
Varsayılan olarak periyodik görevler, UTC zamanını kullanır, ancak ZamanlayıcıSeçenekleri
ni kullanarak kullanılan zaman dilimini değiştirebilirsiniz.
// Örneğin, varsayılan UTC zaman dilimi yerine America/Los_Angeles zaman dilimini kullanın.
loc, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
panic(err)
}
scheduler := asynq.NewScheduler(
redisConnOpt,
&asynq.SchedulerOpts{
Konum: loc,
},
)
Görev Kaydı
Periyodik olarak görevleri kuyruğa eklemek için, Zamanlayıcıyla bir görev kaydı kaydetmeniz gerekir.
scheduler := asynq.NewScheduler(redisConnOpt, nil)
görev := asynq.NewTask("örnek_görev", nil)
// Zamanlama belirtimi dizgesini belirtmek için bir cron belirtimi dizgesi kullanabilirsiniz.
entryID, err := scheduler.Kaydet("* * * * *", görev)
if err != nil {
log.Fatal(err)
}
log.Printf("bir giriş kaydedildi: %q\n", entryID)
// Ayrıca aralıkları belirtmek için "@every " kullanabilirsiniz.
entryID, err = scheduler.Kaydet("@every 30s", görev)
if err != nil {
log.Fatal(err)
}
log.Printf("bir giriş kaydedildi: %q\n", entryID)
// Ayrıca seçenekler geçirebilirsiniz.
entryID, err = scheduler.Kaydet("@every 24saat", görev, asynq.Kuyruk("benimkuyruk"))
if err != nil {
log.Fatal(err)
}
log.Printf("bir giriş kaydedildi: %q\n", entryID)
Zamanlayıcıyı Çalıştırma
Zamanlayıcıyı başlatmak için, Zamanlayıcı üzerinde Çalıştır
ı çağırın.
scheduler := asynq.NewScheduler(redisConnOpt, nil)
// ... Görevleri Kaydet
if err := scheduler.Çalıştır(); err != nil {
log.Fatal(err)
}
Çalıştır
ı çağırmak TERM veya INT sinyalini (örneğin, Ctrl-C) bekleyecektir.
Hata İşleme
Zamanlayıcı görevleri kuyruğa eklemekte başarısız olursa hataları işlemek için bir işleyici işlevi sağlayabilirsiniz.
func görevEklenirkenHataİşle(task *asynq.Task, opts []asynq.Seçenek, err error) {
// Hata işleme mantığınız
}
scheduler := asynq.NewScheduler(
redisConnOpt,
&asynq.SchedulerOpts{
GörevEklemeHataİşleyici: görevEklenirkenHataİşle,
},
)
CLI Üzerinden Kontrol Etme
CLI'nin cron
adında Zamanlayıcı kayıtlarını kontrol etmek için bir alt komutu bulunmaktadır.
Şu anda çalışan Zamanlayıcı için tüm kayıtları görmek için aşağıdaki komutu çalıştırabilirsiniz:
asynq cron ls
Bu komut, her kayıt için ID, zamanlama belirtimi, bir sonraki kuyruğa ekleme zamanı ve son kuyruğa ekleme zamanını içeren bir liste çıktılar.
Ayrıca her kaydın geçmişini görmek için aşağıdaki komutu çalıştırabilirsiniz:
asynq cron geçmiş