Laravel 9 Queue SQS xử lý công việc kiểu hàng đợi
1: Queue là gì , khi nào sử dụng queue
Queue cho phép chúng ta trì hoãn 1 công việc mất nhiều thời gian thực hiện một thời điểm nào đó .Ví dụ khi bạn làm 1 website đặt hàng quá trình xử lý : khách đặt hàng trên website ->gửi mail báo cho quản lý cửa hàng ->gửi mail cho khách báo đặt hàng thành công -> thông báo cho khách đặt hàng thành công .Với 1 website hàng trăm người đặt hàng cùng 1 lúc thì sẽ dẫn đến quá trình nghẽn mạng và việc hiển thị thông báo cho khách đặt hàng thành công báo sẽ chậm hơn .Vậy bây giờ chúng ta sẽ cần 1 giải pháp đó là hàng đợi queue .Hàng đợi ở đây giúp chúng ta trì hoãn các công việc chưa cần gấp .Lưu ý chưa cần gấp .Như ở ví dụ trên đó chính là bước gửi mail cho quản lý cửa hàng và gửi mail cho khách hàng để thực hiện việc quan trọng hơn đó là hiển thị ngay lập tức là khách hàng đã đặt hàng thành công .
Ý nghĩa và chức năng là như vậy .Vậy giờ chúng ta sẽ bắt tay vào demo 1 ví dụ queue để chúng ta làm quen dần với queue trong laravel 9 .
Ở đây mình sử dụng SQS của Amazon để làm queue lý do : thứ 1 là đỡ làm phình to database khi dùng database làm queue ,thứ 2 là amazon đang miễn phí 1 triệu sqs với bậc free giúp chúng ta đỡ chi phí rất nhiều trong quá trình vận hàng .Link chi tiết bạn tham khảo https://aws.amazon.com/vi/sqs/
2 Demo cài đặt queue
1 : Tạo SQS trong Amazon theo các bước sau :
Tạo user truy cập queue
Chọn dịch vụ sqs full access .Cứ vậy next đến cuối cùng là oke
2 : Tạo ứng dụng laravel 9 demo queue
Chúng ta tạo 1 ứng dụng laravel với lệnh sau :
composer create-project laravel/laravel queue
Tiếp theo chúng ta sẽ cài đặt gói aws dành cho php với lệnh sau :
composer require aws/aws-sdk-php
Tạo 1 Job demo với command sau :
php artisan make:job DemoJob
Trong file demo job :
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class DemoJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public $id;
public function __construct($id)
{
$this->id= $id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
echo $this->id;
}
}
Tạo 1 Controller queue :
php artisan make:controller DemoController
Trong file app/Http/Controllers/DemoController.php
delay(Carbon::now()->addSecond(30));
$this->dispatch($job);
}
}
}
Vào mục router routes/web.php
Giờ chúng ta cấu hình queue kết nối với sqs trên amazon bằng cách thêm vào file .env
QUEUE_CONNECTION=sqs
AWS_ACCESS_KEY_ID=you_key
AWS_SECRET_ACCESS_KEY=you_key_secret
SQS_PREFIX=https://sqs.ap-southeast-1.amazonaws.com/343889890222/
AWS_DEFAULT_REGION=ap-southeast-1
SQS_QUEUE=lashareinfo
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
Oke vậy là xong chúng chạy lệnh :
php artisan serve
Và tạo lệnh lắng nghe queue với lệnh sau :
php artisan queue:listen
Vậy là xong .Chúng ta truy cập http://127.0.0.1:8000/ để xem kết quả
Cám ơn bạn đã xem blog của mình .
Link download project demo ở dưới :