ٹاسک ٹائم آؤٹ

اس صفحے میں، میں آپ کو بتاؤں گا کہ ایک ٹاسک کے لیے ٹائم آؤٹ یا ڈیڈ لائن کیسے سیٹ کیا جائے اور منسوخ کرنے کے عمل کیسے دھراے جائیں۔

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]