جائزہ
آپ ایک Scheduler
کو Server
کے ساتھ متزامن طور پر چلا سکتے ہیں تاکہ دورانِ فعالیت تسکس کو دورانِ کے اندراج کرسکے۔ سچھولڈر دورانِ بے حاضر ورکر سرورز کی کلسٹر میں تکمیل کرنے والے تسکس کو دورانِ کریں.
آپ کو یہ یقینی بنانا ہے کہ ہر ایک شیڈول کے لینے یہاں کی چلنا پسند ہو تاکہ انڈپلیکیٹ ٹسکس سے بچا جا سکے۔ وسطیہ تک سراہت پر یہ معنی رکھتا ہے کہ ہمیں ہم سنکرونائزیشن کی افراط نہیں ہونی چاہئے اور خدمت بغیر تالوں کے چل سکتی ہے.
اگر آپ کو دورانِ فعالیت تسکوں کو اضافہ کرنا ہو یا ہٹانا ہو تو دورانی تسک کا استعمال کرتے وقت PeriodicTaskManager
کا استعمال کریں بجائے کہ سیدھے طور پر Scheduler
کا استعمال کریں۔ زیادہ تفصیل جاننے کے لئے دیگر معلومات کے لئے یہ ویکی دیکھیں۔
وقتی موزوں
پیش فرض، دورانی تسک هر وقتی استعمال کرتا ہے، لیکن آپ SchedulerOpts
کا استعمال کر کے وقتی موزوں کون سا وقتی استعمال کیا جاتا ہے بدل سکتا ہے۔
// مثال کے طور پر، پیش فرض یو ڟی ی سے بجائے امریکہ / لوس / انگلس وقتی موزوں کا استعمال کریں۔
loc, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
panic(err)
}
scheduler := asynq.NewScheduler(
redisConnOpt,
&asynq.SchedulerOpts{
Location: loc,
},
)
تسک رجسٹریشن
وقتا فو قثو_०شیڈول کے مطابق تسکس کو قو منطقے میں شامل کرنے کیلئے, آپ کو Scheduler کے ساتھ ایک تسک ریکارڈ رجسٹر کرنا ہوگا۔
scheduler := asynq.NewScheduler(redisConnOpt, nil)
task := asynq.NewTask("example_task", nil)
// آپ ایک کرون مخصوصیت سٹرنگ استعمال کرکے شیڈول مخصوص کرنے کے لئے استعمال کر سکتے ہیں۔
entryID, err := scheduler.Register("* * * * *", task)
if err != nil {
log.Fatal(err)
}
log.Printf("registered an entry: %q\n", entryID)
// آپ وقت وقتی مخصوص کرنے کے لئے "@every " بھی استعمال کر سکتے ہیں۔
entryID, err = scheduler.Register("@every 30s", task)
if err != nil {
log.Fatal(err)
}
log.Printf("registered an entry: %q\n", entryID)
// آپ خیارات بھی پاس کر سکتے ہیں۔
entryID, err = scheduler.Register("@every 24h", task, asynq.Queue("myqueue"))
if err != nil {
log.Fatal(err)
}
log.Printf("registered an entry: %q\n", entryID)
شیڈولر چلانا
شیڈولر چلانے کے لئے, Scheduler پر Run
کو بلائیں۔
scheduler := asynq.NewScheduler(redisConnOpt, nil)
// ... تسکس رجسٹر کریں
if err := scheduler.Run(); err != nil {
log.Fatal(err)
}
Run
کو TERM
یا INT
سگنل (جیسے کہ Ctrl-C) کا انتظار کرتا ہے۔
خرابی کا ہینڈلنگ
اگر Scheduler تسکس کو انکیو کرنے میں ناکام ہو جاتا ہے تو آپ ایک ہینڈلر تشکیل دے سکتے ہیں کہ خرابی کو دور کیا جائے۔
func handleEnqueueError(task *asynq.Task, opts []asynq.Option, err error) {
// آپ کا خرابی کا عمل منطق
}
scheduler := asynq.NewScheduler(
redisConnOpt,
&asynq.SchedulerOpts{
EnqueueErrorHandler: handleEnqueueError,
},
)
سی آئی ایل ای کے ذریعے چیک کرنا
سی آئی ایل میں کرون
نام کا ایک ذیلی کمانڈ ہوتا ہے جو شیڈولر ریکارڈ کو چیک کرنے کے لئے استعمال ہوتا ہے۔
فعال شیڈولر کے تمام ریکارڈز کو دیکھنے کے لئے آپ مندرجہ ذیل کمانڈ چلا سکتے ہیں:
asynq cron ls
یہ کمانڈ ہر ریکارڈ کا آئی ڈی, شیڈول تفصیل, اگلا انکیو وقت, اور آخری انکیو وقت ظاہر کرتی ہے۔
آپ ہر ریکارڈ کی تاریخ دیکھنے کے لئے مندرجہ ذیل کمانڈ بھی چلا سکتے ہیں:
asynq cron history