# Laravel Job & Queue System

Laravel হলো একটি শক্তিশালী PHP ফ্রেমওয়ার্ক যা ডেভেলপারদের জন্য অনেক সুবিধা এনে দিয়েছে। এর অন্যতম চমৎকার একটি ফিচার হলো **Job & Queue System**। এই সিস্টেমের মাধ্যমে আপনি অ্যাপ্লিকেশনের সময়-নিবিড় কাজগুলোকে ব্যাকগ্রাউন্ডে পাঠিয়ে রাখতে পারেন, ফলে ইউজারদের জন্য অভিজ্ঞতাটি হয় অনেক দ্রুত ও স্মুথ।

এই ব্লগে আমরা শিখবো Laravel-এর Job এবং Queue কী, কেন এটি দরকার, এবং কীভাবে এটি ব্যবহার করা যায়।

---

## ✅ Job & Queue System কী?

Laravel-এ **Job** হচ্ছে এমন একটি ক্লাস, যা নির্দিষ্ট কোন কাজ (task) করার জন্য তৈরি করা হয়। এই কাজটি তাৎক্ষণিকভাবে সম্পন্ন না করে **Queue** (সারি) তে পাঠিয়ে ব্যাকগ্রাউন্ডে প্রসেস করা হয়।

**Queue System** হচ্ছে সেই প্রসেস, যেটি ব্যাকগ্রাউন্ডে Job গুলো একে একে রান করে।

### 🎯 উদাহরণ:

আপনি যদি ইউজার রেজিস্ট্রেশনের পর একটি ইমেইল পাঠাতে চান, তবে এটি সরাসরি না পাঠিয়ে Queue-তে পাঠানো যায়। এতে ইউজার দ্রুত রেজিস্ট্রেশন সম্পন্ন করতে পারে এবং ইমেইল কিছু সেকেন্ড পরে গেলেও সমস্যা হয় না।

---

## 🛠 কেন Job & Queue ব্যবহার করবেন?

* ইউজার এক্সপেরিয়েন্স উন্নত হয়
    
* অ্যাপ্লিকেশন দ্রুত রেসপন্স দেয়
    
* সময়-নিবিড় কাজ যেমন: ইমেইল, রিপোর্ট জেনারেশন, ভিডিও প্রসেসিং সহজে ব্যাকগ্রাউন্ডে করা যায়
    
* সার্ভারের উপর চাপ কমে
    

---

## 🚀 Laravel-এ Job & Queue সেটআপ

### ১. Queue ড্রাইভার কনফিগার

`.env` ফাইলে নিচের মতো সেট করুন:

```plaintext
QUEUE_CONNECTION=database
```

এর মানে Laravel Queue ডেটাবেজ ব্যবহার করবে Queue সংরক্ষণের জন্য।

### ২. মাইগ্রেশন তৈরি করুন

```plaintext
php artisan queue:table
php artisan migrate
```

এতে `jobs` নামে একটি টেবিল তৈরি হবে।

---

### ৩. Job তৈরি করুন

```plaintext
php artisan make:job SendWelcomeEmail
```

এর ফলে `App\Jobs\SendWelcomeEmail` নামে একটি Job ক্লাস তৈরি হবে।

#### উদাহরণ কোড:

```plaintext
namespace App\Jobs;

use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

class SendWelcomeEmail implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function handle()
    {
        Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
    }
}
```

---

### ৪. Job Dispatch করুন

```plaintext
use App\Jobs\SendWelcomeEmail;

SendWelcomeEmail::dispatch($user);
```

এখন এটি সরাসরি ইমেইল না পাঠিয়ে Queue-তে পাঠাবে।

---

### ৫. Queue Worker রান করুন

```plaintext
php artisan queue:work
```

এই কমান্ডটি চালালে Laravel Queue-এর মধ্যে থাকা Job গুলো প্রসেস করা শুরু করবে।

---

## 🧠 কিছু গুরুত্বপূর্ণ Queue ড্রাইভার

Laravel বেশ কিছু Queue ড্রাইভার সাপোর্ট করে:

* `sync` – Job সাথে সাথেই এক্সিকিউট হয়
    
* `database` – ডেটাবেজে Queue সংরক্ষণ করে
    
* `redis` – দ্রুত পারফরম্যান্সের জন্য ব্যবহৃত হয়
    
* `beanstalkd`, `sqs` – বড় স্কেল অ্যাপ্লিকেশনে ব্যবহৃত হয়
    

---

## ⏰ Delayed Job & Retry

Job Dispatch করতে চাইলে Delay ও Retry সেট করা যায়:

```plaintext
SendWelcomeEmail::dispatch($user)->delay(now()->addMinutes(5));
```

```plaintext
public $tries = 3; // Retry তিনবার
```

---

## 🧪 ফেইলড Job হ্যান্ডলিং

Job যদি ব্যর্থ হয় তাহলে Laravel সেটি `failed_jobs` টেবিলে সংরক্ষণ করতে পারে। এর জন্য `.env` এ নিচেরটা যুক্ত করুন:

```plaintext
QUEUE_FAILED_DRIVER=database
```

এরপর চালান:

```plaintext
php artisan queue:failed-table
php artisan migrate
```

---

Laravel-এর Job & Queue System আপনার অ্যাপ্লিকেশনকে আরও দক্ষ, দ্রুত এবং ইউজার-ফ্রেন্ডলি করতে সাহায্য করে। যেসব কাজ সময় সাপেক্ষ, যেমন ইমেইল পাঠানো, রিপোর্ট তৈরি, নোটিফিকেশন পাঠানো — এসব সহজেই ব্যাকগ্রাউন্ডে পাঠিয়ে রাখতে পারেন Queue-এর মাধ্যমে।

Queue নিয়ে কাজ করতে ভয় পাবার কিছু নেই — একটু প্র্যাকটিস করলে এটি হয়ে উঠবে Laravel ডেভেলপারদের জন্য একটি অসাধারণ টুল।
