কাজের সময় সীমা
এই পৃষ্ঠায়, আমি আপনাকে কীভাবে কোনো কাজের সময় সীমা বা শেষ সময় নির্ধারণ করবেন এবং বাতিলের অপারেশন কীভাবে হ্যান্ডেল করবেন তা পরিচিত করাব।
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]