Tổng Quan Laravel Queues
Queues cho phép bạn trì hoãn các tác vụ tốn thời gian để cải thiện hiệu suất ứng dụng. Hệ thống queue của Laravel mạnh mẽ và dễ sử dụng, lý tưởng để xử lý các tác vụ nền.
Tạo Job
Tạo một class job sử dụng Artisan:
php artisan make:job ProcessOrder
Định nghĩa logic job trong phương thức handle:
public function handle() {
// Xử lý đơn hàng
}
Dispatch Jobs
Dispatch jobs vào queue sử dụng phương thức dispatch:
ProcessOrder::dispatch($order);
Bạn cũng có thể sử dụng phương thức onQueue để chỉ định một queue:
ProcessOrder::dispatch($order)->onQueue('high-priority');
Jobs Trì Hoãn
Trì hoãn việc thực thi job sử dụng phương thức delay:
ProcessOrder::dispatch($order)->delay(now()->addMinutes(10));
Chuỗi Jobs
Liên kết nhiều jobs với nhau để thực thi tuần tự:
ProcessOrder::withChain([
new SendOrderConfirmation($order),
new UpdateInventory($order),
])->dispatch($order);
Cấu Hình Queues
Thiết lập kết nối queue trong config/queue.php:
'default' => env('QUEUE_CONNECTION', 'database'),
Laravel hỗ trợ nhiều queue drivers, bao gồm database, redis, sqs, và nhiều hơn nữa. Chọn driver phù hợp với nhu cầu ứng dụng của bạn.
Chạy Queue Worker
Khởi động queue worker để xử lý jobs:
php artisan queue:work
Sử dụng tùy chọn --queue để chỉ định một queue:
php artisan queue:work --queue=high-priority
Xử Lý Lỗi
Laravel tự động retry các jobs thất bại. Bạn có thể cấu hình logic retry trong config/queue.php:
'failed' => [
'driver' => 'database',
'database' => 'mysql',
'table' => 'failed_jobs',
],
Sử dụng lệnh queue:failed để xem các jobs thất bại:
php artisan queue:failed
Thực Hành Tốt Nhất
- Sử Dụng Queues Riêng Biệt: Tách biệt queues cho các mức độ ưu tiên hoặc loại job khác nhau.
- Tối Ưu Job Payloads: Chỉ truyền dữ liệu cần thiết cho jobs để giảm overhead serialization.
- Giám Sát Queues: Sử dụng các công cụ như Horizon để giám sát và quản lý queues.
- Xử Lý Lỗi Một Cách Khéo Léo: Triển khai xử lý lỗi và logging đúng cách trong jobs.
- Scale Workers: Tăng số lượng workers để xử lý tải cao hiệu quả.
Các Trường Hợp Sử Dụng Thực Tế
- Gửi Emails: Chuyển việc gửi email sang queues để cải thiện thời gian phản hồi.
- Xử Lý File Lớn: Sử dụng queues để xử lý datasets lớn hoặc tạo reports.
- Gọi API Bên Thứ Ba: Queue các API calls để tránh blocking luồng ứng dụng chính.
Queues là thiết yếu để xây dựng các ứng dụng có thể mở rộng và hiệu quả. Hãy bắt đầu tận dụng hệ thống queue của Laravel để xử lý các tác vụ nền một cách hiệu quả.