Skip to main content

Queue

Laravel Queue​

In Laravel, Queue is a mechanism for asynchronously processing tasks. It allows you to push tasks into the queue and then process them asynchronously in the background without blocking the current request processing flow. This is useful for situations where you need to handle time-consuming tasks or communicate with external services

Introduction​

//Simple passing parameters
SendEmailJob::dispatch();
SendEmailJob::dispatch($data, $header);

//Passing parameters
dispatch(new SendEmailJob());
dispatch(new SendEmailJob($userMail));

Install Table​

php artisan queue:table
.env
QUEUE_CONNECTION=database

Startup​

php artisan queue:work

Basic usage​

Install Queue file​
php artisan make:job SlowJob
Use (Send data)​
SalesCsvProcess::dispatch($data, $header);
Job file​
class SalesCsvProcess implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $data;
public $header;

/**
* Create a new job instance.
*/
public function __construct($data,$header)
{
$this->data = $data;
$this->header = $header;
}

/**
* Execute the job.
*/
public function handle(): void
{
foreach($this->data as $sale){
$saleData = array_combine($this->header,$sale);
Sales::create($saleData);
}
}
}

start up​

php artisan queue:work

Queue and Email Usage​

Install Event​
php artisan make:event UserRegistered
Install Listener​
php artisan make:listener SendWelcomeEmail --event=UserRegistered
Send data​
Register::dispatch($user);
Save Event data​
class Register
{
use Dispatchable, InteractsWithSockets, SerializesModels;

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

public function broadcastOn(): array
{
return [
new PrivateChannel('channel-name'),
];
}
}
Listener Send Email Request​
class SendRegisterEmailNotification implements ShouldQueue
{
use InteractsWithQueue;

public $tries = 3;

public function __construct()
{
//
}

public function handle($event)
{
$email = new Register($event->user);
Mail::to($event->user->email)->send($email);
}

}

start up​

php artisan queue:work

Email usage​

Install Mail file​
php artisan make:mail WelcomeMail
Code​
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;

public $user;

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

public function envelope(): Envelope
{
return new Envelope(
subject: 'CodingTOTP',
);
}

public function content(): Content
{
return new Content(
view: 'emails.register',
);
}

public function attachments(): array
{
return [];
}
}

Email 2​

register In the code

Mail::to($data->email)->send(new WelcomeMail($data->name));
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;

public $user;

public function __construct(private $name)
{
//
}

public function envelope(): Envelope
{
return new Envelope(
subject: 'CodingTOTP',
);
}

public function content(): Content
{
return new Content(
view: 'emails.register',
with: ['name' => $this->name]
);
}

public function attachments(): array
{
return [];
}
}

Send pictures​

public function attachments(): array
{
$attachment = public_path('images/logo.png');
return [
Attachment::fromPath($attachment),
];
}

======

Use

php artisan queue:table
php artisan make:job JobName

Job

private $email;
private $name;

construct($email, $name)
{
$this->email = $email;
$this->name = $name;
}

public function handle():vold
{
Mail::to($data->email)->send(new WelcomeMail($data->name));
}

Controller

JobName::dispatch($data->email, $data->name);