ٹاسک ٹائم آؤٹ
اس صفحے میں، میں آپ کو بتاؤں گا کہ ایک ٹاسک کے لیے ٹائم آؤٹ یا ڈیڈ لائن کیسے سیٹ کیا جائے اور منسوخ کرنے کے عمل کیسے دھراے جائیں۔
Client
کا استعمال کرتے ہوئے ایک ٹاسک کو قطاربندی کرتے وقت، آپ Timeout
یا Deadline
کو ایک اختیار کے طور پر مخصوص کرسکتے ہیں۔ یہ سرور کو اجازت دیتا ہے کہ اگر ٹاسک ٹائم آؤٹ یا ڈیڈ لائن سے پہلے پورا نہیں ہوتا تو ٹاسک کو چھوڑ دے اور دیگر ماموریتوں کے لئے وسائل دوبارہ حاصل کرلے۔ یہ اختیارات context.Context
کی ٹائم آؤٹ یا ڈیڈ لائن کو سیٹ کریں اور اسے آپ کے ہینڈلر کو پہلا پیرامیٹر کے طور پر پاس کریں۔
*نوٹ: ٹائم آؤٹ **وقتی سلسلے کے ساتھ تھا ہوا ہے جب ہینڈلر کام کرنے شروع ہوتا ہے۔
مثال کے طور پر، اگر آپ کے پاس ایک ٹاسک ہو جو تینتیس سیکنڈ کے اندر پورا ہونا چاہئے، تو آپ ٹائم آؤٹ کو 30*time.Second
پر سیٹ کر سکتے ہیں۔
c := asynq.NewClient(asynq.RedisClientOpt{Addr: ":6379"})
err := c.Enqueue(task, asynq.Timeout(30 * time.Second))
اگر آپ کے پاس ایک ٹاسک ہو جو ایک مخصوص وقت تک پورا ہونا چاہئے، تو آپ ٹاسک کے لیے ڈیڈ لائن سیٹ کر سکتے ہیں۔
مثال کے طور پر، اگر آپ کے پاس ایک ٹاسک ہو جو 2020-12-25
سے پہلے پورا ہونا چاہئے، تو آپ اسے Deadline
اختیار کے طور پر پاس کر سکتے ہیں۔
xmas := time.Date(2020, time.December, 25, 0, 0, 0, 0, time.UTC)
err := c.Enqueue(task, asynq.Deadline(xmas))
ہینڈلرز میں ٹاسک کے سیاق و سباق
اب جب ہم نے Timeout
اور Deadline
اختیارات کا استعمال کر کے ایک ٹاسک بنایا ہے، ہمیں اس قدرت کو ادا کرنا ہوگا کہ ہم کنٹیکسٹ کے Done
چینل کو پڑھ کر اس قدرت کو ادا کریں۔
Handler
کو پاس کرنے والے پہلے پیرامیٹر کی طرف context.Context
ہوتا ہے۔ آپ کو اپنے ہینڈلر کو ایسے طریقے سے لکھنا چاہئے جو کنٹیکسٹ سے منسوخ کرنے کی علامت ملنے پر کام چھوڑ دے۔
func myHandler(ctx context.Context, task *asynq.Task) error {
c := make(chan error, 1)
go func() {
c <- doWork(task)
}()
select {
case <-ctx.Done():
// منسوخی سگنل موصول ہوا ہے، اس کام کو چھوڑ دیں۔
return ctx.Err()
case res := <-c:
return res
}
}
کمانڈ لائن کے ذریعے ٹاسک کے منسوخ کرنا
asynq
CLI میں cancel
کمانڈ ہے جو فعال ٹاسک کی شناخت منسوخ کرسکتا ہے۔
آپ کمانڈ workers
استعمال کرکے فعال ٹاسک کی فہرست دیکھ سکتے ہیں اور منسوخ کرنے والے ٹاسک کی شناخت حاصل کرسکتے ہیں۔
asynq task ls --queue=myqueue --state=active
asynq task cancel [task_id]