What is a Job?

A Job is the task you want to perform.

app/
 └── Jobs/
      └── SendWelcomeEmail.php

Examples:

  • Send Email
  • Send SMS
  • Generate PDF
  • Upload Image

What is a Queue?

A Queue stores the job and executes it later in the background.

  • Job = The work (task).
  • Queue = A waiting line for jobs.

Example: Send Welcome Email:

Step 1: Create a Job:

php artisan make:job SendWelcomeEmail

Step 2: Job File:

app/Jobs/SendWelcomeEmail.php

class SendWelcomeEmail
{
    public function handle()
    {
        echo "Welcome Email Sent";
    }
}

handle() contains the work to perform.

Step 3: Dispatch the Job:

UserController.php

use App\Jobs\SendWelcomeEmail;

public function register()
{
    // Save user

    SendWelcomeEmail::dispatch();

    return "User Registered";
}

dispatch() sends the job to the queue.

// After 30 seconds
SendWelcomeEmail::dispatch()->delay(now()->addSeconds(30));

// After 1 minute
SendWelcomeEmail::dispatch()->delay(now()->addMinute());

// After 5 minutes
SendWelcomeEmail::dispatch()->delay(now()->addMinutes(5));

// After 1 hour
SendWelcomeEmail::dispatch()->delay(now()->addHour());

Step 4: Run Queue Worker

php artisan queue:work
  • User registers.
  • Wait 5 minutes.
  • Send a welcome email.