কাজের সময় সীমা

এই পৃষ্ঠায়, আমি আপনাকে কীভাবে কোনো কাজের সময় সীমা বা শেষ সময় নির্ধারণ করবেন এবং বাতিলের অপারেশন কীভাবে হ্যান্ডেল করবেন তা পরিচিত করাব।

Client ব্যবহার করে টাস্ক কিউয়ে মেশিনে নিয়োগ দেওয়ার সময়, আপনি একটি অপশন হিসেবে Timeout বা Deadline নির্দিষ্ট করতে পারেন। এটা অনুমতি দেয় যদি টাস্কটি সময় অথবা শেষ সময় পূর্ণ হয় না তাহলে দিয়ে সার্ভারটি এই কাজগুলির জন্য সম্পদ অধিগ্রহণ করার জন্য। এই অপশনগুলি যাচাই করবে context.Context এর সময় সীমা বা শেষ সময় নির্ধারণ করবে এবং এটি আপনার হ্যান্ডলারের প্রথম প্যারামিটার হিসেবে পাস করতে হবে।

*নোট: সময় সীমা হলো যখন হ্যান্ডলার কাজ শুরু করে

যেমন, আপনার যদি ৩০ সেকেন্ডের মধ্যে সমাপ্ত হতে হবে তার জন্য একটি টাস্ক থাকে, তবে আপনি সময় সীমা হিসেবে 30*time.Second নির্ধারণ করতে পারেন।

c := asynq.NewClient(asynq.RedisClientOpt{Addr: ":6379"})

err := c.Enqueue(task, asynq.Timeout(30 * time.Second))

আপনার যদি একটি নির্দিষ্ট সময়ে কাজ সমাপ্ত হতে হবে তাহলে আপনি টাস্কের জন্য শেষ সময় নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, আপনার যদি ২০২০-১২-২৫ এর আগে কাজ সমাপ্ত হওয়া দরকার হয় তাহলে আপনি এটি Deadline অপশন হিসেবে পাস করতে পারেন।

xmas := time.Date(2020, time.December, 25, 0, 0, 0, 0, time.UTC)
err := c.Enqueue(task, asynq.Deadline(xmas))

হ্যান্ডলারে কাজের সময় সীমা

আমরা এখানে Timeout এবং Deadline অপশন ব্যবহার করে টাস্ক তৈরি করেছি, তাই আমাদের এই মানটি যথাযথভাবে মেনে নেওয়া উচিত যেগুলি কনটেক্স্টের ডানে চ্যানেল পড়া দ্বারা।

Handler কে পাস করা প্রথম প্যারামিটার হল context.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
    }   
}

CLI দ্বারা টাস্ক বাতিল করা

asynq CLI এর একটি ক্যাঞ্চাল কমান্ড আছে cancel যা একটি সক্রিয় কার্যের আইডি বাতিল করতে পারে।
আপনি ধরতে পারেন workers কমান্ড ব্যবহার করে বর্তমানে সক্রিয় টাস্কগুলি চেক করতে এবং বাতিল করতে টাস্কের আইডি পেতে।

asynq task ls --queue=myqueue --state=active
asynq task cancel [task_id]