Laravel Queues: Xử lý tác vụ nặng mà không làm user phải chờ đợi
Đừng để user phải chờ gửi email hay export báo cáo. Học cách sử dụng Laravel Queues, Redis và Horizon để xử lý background jobs hiệu quả.
Nguyễn Văn A Nguồn
Trong các ứng dụng web thực tế, có những tác vụ tốn rất nhiều thời gian để xử lý:
- Gửi email Marketing cho 10,000 người dùng.
- Resize ảnh upload.
- Export báo cáo Excel nặng 50MB.
Nếu bạn xử lý các tác vụ này đồng bộ (Sync) ngay trong Controller, user sẽ phải chờ trình duyệt quay vòng vòng (loading) cả phút đồng hồ. Trải nghiệm cực tệ!
Giải pháp là Laravel Queues (Hàng đợi).
Cơ chế hoạt động
Thay vì thực hiện ngay, Controller sẽ ném một “Job” vào hàng đợi (Queue - thường lưu ở Redis hoặc Database). Job này chứa thông tin cần làm (VD: Gửi mail cho user ID 123). Sau đó Controller trả về response “Thành công” cho user ngay lập tức (mất 20ms).
Ở phía sau (Background), một Worker process (chạy ngầm) sẽ liên tục lấy các Job từ Queue ra và xử lý dần dần.
Cấu hình Redis Queue
Driver tốt nhất cho Queue là Redis vì tốc độ cực nhanh.
- Cài đặt:
composer require predis/predis - File
.env:QUEUE_CONNECTION=redis
Tạo Job
php artisan make:job SendWelcomeEmail
Trong class Job:
public function handle()
{
// Logic gửi mail nặng nề ở đây
Mail::to($this->user)->send(new WelcomeEmail());
}
Trong Controller:
// Gửi job vào queue, user không phải chờ
SendWelcomeEmail::dispatch($user);
Laravel Horizon
Để quản lý Queue chuyên nghiệp, Laravel cung cấp Horizon - một dashboard tuyệt đẹp (chỉ dành cho Redis).
Horizon cho phép bạn:
- Xem số lượng job đang chờ, đang chạy, thất bại.
- Theo dõi tốc độ xử lý (Throughput).
- Cấu hình cân bằng tải (Balancing strategy): Tự động tăng số lượng worker khi hàng đợi bị dồn ứ (Auto-scaling).
Xử lý Job thất bại (Failed Jobs)
Điều tuyệt vời nhất là cơ chế Retry. Nếu gửi mail thất bại (do server mail chết), Laravel sẽ tự động thử lại 3 lần (cấu hình tries). Nếu vẫn lỗi, job sẽ chuyển vào bảng failed_jobs, bạn có thể xem lại log và retry thủ công sau này.
Queues là kỹ thuật bắt buộc phải biết để build hệ thống High Performance với Laravel.
Tham khảo Laravel Documentation.
Thử Thách Kiến Thức Lịch Sử?
Khám phá hàng trăm câu hỏi trắc nghiệm lịch sử thú vị tại HistoQuiz. Vừa học vừa chơi, nâng cao kiến thức ngay hôm nay!
Laravel Docs
Nhà xuất bản gốcBài viết này được trích dẫn và tổng hợp từ Laravel Docs, nơi cung cấp các bài viết và tài liệu chất lượng cao.