Ruby on Rails-এ Active Job একটি ফ্রেমওয়ার্ক যা ব্যাকগ্রাউন্ড জব (background jobs) পরিচালনা করতে ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনকে ব্যাকগ্রাউন্ডে দীর্ঘ-running প্রক্রিয়া (যেমন ইমেইল পাঠানো, ফাইল আপলোড, ডেটা প্রসেসিং) সম্পাদন করতে সহায়তা করে, যাতে ব্যবহারকারীর অভিজ্ঞতা বাধাগ্রস্ত না হয় এবং সিস্টেমের পারফরম্যান্স উন্নত থাকে। Active Job ইন্টারফেস Rails-এর মাধ্যমে ব্যাকগ্রাউন্ড কাজ পরিচালনার জন্য একটি ইউনিফাইড এবং সমন্বিত পদ্ধতি প্রদান করে।
Active Job কী?
Active Job হলো Rails-এর একটি ফ্রেমওয়ার্ক যা ব্যাকগ্রাউন্ড জবগুলোকে সহজভাবে তৈরি, পরিচালনা এবং এক্সিকিউট করতে ব্যবহৃত হয়। এটি ব্যাকগ্রাউন্ড জবগুলো বিভিন্ন কিউ সিস্টেম (যেমন Sidekiq, Resque, Delayed Job ইত্যাদি) এর মাধ্যমে পরিচালনা করে। Active Job একটি সাধারণ ইন্টারফেস সরবরাহ করে যা অ্যাপ্লিকেশনটিকে বিভিন্ন কিউ সিস্টেমের সঙ্গে কাজ করার সুযোগ দেয়।
Active Job এর প্রধান বৈশিষ্ট্য
- ইন্টারফেস abstraction: Active Job আপনাকে একক ইন্টারফেসের মাধ্যমে বিভিন্ন কিউ সিস্টেমে কাজ করতে সাহায্য করে। অর্থাৎ, আপনি যদি একসময় Sidekiq ব্যবহার করতে চান এবং পরবর্তীতে Resque এ চলে যান, তবে Active Job-এর মাধ্যমে আপনার কোডে খুব বেশি পরিবর্তন করতে হবে না।
- Retrying jobs: Active Job আপনার ব্যাকগ্রাউন্ড কাজগুলো পুনরায় প্রয়োগ করতে সক্ষম, যদি কোনও কারণে তারা ব্যর্থ হয়।
- Asynchronous execution: ব্যাকগ্রাউন্ড জবগুলো অ্যাসিঙ্ক্রোনাসভাবে সম্পাদিত হয়, যাতে ব্যবহারকারী অ্যাপ্লিকেশনের অন্যান্য ফাংশনগুলো ব্যবহার করতে পারে।
Active Job কনফিগারেশন
Rails এ Active Job ব্যবহারের জন্য আপনাকে একটি কিউ সিস্টেম নির্বাচন করতে হবে, যেটি সাধারণত config/application.rb অথবা পরিবেশ কনফিগারেশনে (config/environments/production.rb, config/environments/development.rb) কনফিগার করা হয়।
উদাহরণস্বরূপ:
- Sidekiq ব্যবহার করার জন্য কনফিগারেশন:
config.active_job.queue_adapter = :sidekiq
- Resque ব্যবহার করার জন্য কনফিগারেশন:
config.active_job.queue_adapter = :resque
এটি নিশ্চিত করবে যে Active Job সিস্টেমটি Sidekiq বা Resque কিউ সিস্টেমের মাধ্যমে কাজ করবে।
Active Job এর মাধ্যমে ব্যাকগ্রাউন্ড জব তৈরি
1. Job তৈরি করা
প্রথমে আপনাকে একটি Job তৈরি করতে হবে, যা ব্যাকগ্রাউন্ডে এক্সিকিউট হবে। Rails-এ Job তৈরি করতে rails generate job কমান্ড ব্যবহার করা হয়।
rails generate job SendWelcomeEmail
এটি app/jobs/send_welcome_email_job.rb ফাইল তৈরি করবে, যেখানে আপনি ব্যাকগ্রাউন্ড কাজের লজিক রাখতে পারবেন।
send_welcome_email_job.rb ফাইলের একটি উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
queue_as :default
def perform(user)
# এখানে ব্যাকগ্রাউন্ডে ইমেইল পাঠানোর কোড থাকবে
UserMailer.welcome_email(user).deliver_later
end
end
এখানে, perform মেথডটি ব্যাকগ্রাউন্ডে চালানো হবে এবং এটি একটি user অবজেক্ট গ্রহণ করবে। এরপর এটি UserMailer ব্যবহার করে ইমেইল পাঠাবে।
2. Job কল করা
ব্যাকগ্রাউন্ড জবটি কল করতে, আপনি perform_later মেথড ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
SendWelcomeEmailJob.perform_later(user)
এটি SendWelcomeEmailJob কে ব্যাকগ্রাউন্ডে এক্সিকিউট করার জন্য কিউয়ে রাখবে।
Queue এবং Priority
Rails-এ Active Job কিউ সিস্টেমে কাজ করে, এবং কিউয়ের মধ্যে কাজগুলি একটি নির্দিষ্ট অর্ডারে থাকে। আপনি প্রতিটি কাজের জন্য একটি কিউ সেট করতে পারেন, যাতে কাজগুলি নির্দিষ্ট অর্ডারে প্রসেস করা হয়। যদি না দেয়া থাকে, তবে ডিফল্ট কিউ ব্যবহৃত হবে।
উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
queue_as :high_priority
def perform(user)
UserMailer.welcome_email(user).deliver_later
end
end
এখানে queue_as :high_priority দ্বারা এই জবটি high_priority কিউতে রাখা হবে, যেটি অন্য কম গুরুত্বপূর্ণ কাজের চেয়ে আগে প্রক্রিয়া হবে।
Job Retry (পুনঃপ্রচেষ্টা)
Active Job স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ড জবগুলো পুনরায় প্রয়োগ (retry) করতে পারে যদি জবটি প্রথমে ব্যর্থ হয়। আপনি কিভাবে এবং কখন পুনরায় প্রয়োগ করতে চান তা কনফিগার করতে পারেন।
উদাহরণ:
class SendWelcomeEmailJob < ApplicationJob
retry_on SomeCustomError, wait: 5.seconds, attempts: 3
def perform(user)
# ব্যাকগ্রাউন্ড কাজের লজিক
end
end
এখানে retry_on মেথডটি নির্দেশ করে যে যদি SomeCustomError ঘটে, তবে ৫ সেকেন্ড পর পুনরায় চেষ্টা করবে এবং সর্বোচ্চ ৩টি চেষ্টা করবে।
Background Job-এর প্রকারভেদ
Rails-এ কিছু সাধারণ ব্যাকগ্রাউন্ড জব সিস্টেম রয়েছে:
- Sidekiq: একটি দ্রুত এবং শক্তিশালী কিউ সিস্টেম, যা Redis ব্যবহার করে। এটি উচ্চ পারফরম্যান্সের জন্য পরিচিত।
- Resque: Redis-ভিত্তিক একটি কিউ সিস্টেম, তবে Sidekiq-এর চেয়ে কিছুটা ধীরগতির হতে পারে।
- Delayed Job: একটি সিম্পল কিউ সিস্টেম, যেটি Active Record ব্যবহারের মাধ্যমে ব্যাকগ্রাউন্ড কাজ পরিচালনা করে।
- Que: একটি আরও উন্নত কিউ সিস্টেম, যা PostgreSQL এর সঙ্গে কাজ করে।
Testing Active Job
Active Job-এর টেস্টিং খুবই সহজ। Rails নিজেই একটি বিশেষ টুল সরবরাহ করে, যা দিয়ে আপনি ব্যাকগ্রাউন্ড জবগুলো টেস্ট করতে পারবেন। উদাহরণস্বরূপ, আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট জব সঠিকভাবে কিউতে যুক্ত হয়েছে।
উদাহরণ:
require 'test_helper'
class SendWelcomeEmailJobTest < ActiveJob::TestCase
test "should enqueue job" do
assert_enqueued_with(job: SendWelcomeEmailJob) do
SendWelcomeEmailJob.perform_later(users(:one))
end
end
end
এই টেস্টটি নিশ্চিত করবে যে SendWelcomeEmailJob সঠিকভাবে কিউতে যুক্ত হচ্ছে।
সারমর্ম
Active Job একটি অত্যন্ত শক্তিশালী এবং সাধারণ ইন্টারফেস যা Rails অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ড কাজগুলো পরিচালনা করতে সাহায্য করে। এটি বিভিন্ন কিউ সিস্টেমের মধ্যে অ্যাবস্ট্রাকশন সরবরাহ করে, যা ডেভেলপারদের কোডকে আরও সুসংগঠিত এবং মডুলার করে তোলে। Active Job দিয়ে আপনি ব্যাকগ্রাউন্ডে কাজ করতে পারেন, যেমন ইমেইল পাঠানো, ডেটা প্রসেসিং ইত্যাদি, যা অ্যাপ্লিকেশনটির পারফরম্যান্স উন্নত করে এবং ব্যবহারকারীর অভিজ্ঞতা বজায় রাখে।
Read more