Laravel nâng cao

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ả.

newspaper

Nguyễn Văn A Nguồn

Laravel Docs 29 tháng 12, 2025
Laravel Queues: Xử lý tác vụ nặng mà không làm user phải chờ đợi
Featured Image

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.

  1. Cài đặt: composer require predis/predis
  2. 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.

history_edu Góc học tập & giải trí

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!

Chơi Ngay arrow_forward
public

Laravel Docs

Nhà xuất bản gốc

Bà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.