Queue trong Laravel và sử dụng supervisor để giám sát xử lý queue trên ubuntu

Tram Ho

Laravel Queue là gì?

Queue là một danh sách những công việc cần làm (job) hàng đợi cần được xử lý theo thứ tự. Ví dụ khi có 1000 người click vào nút gửi mail của mình, tất cả sẽ được xếp theo thứ tự và việc gửi mail sẽ được xử lý lần lượt. Và các job sẽ có thể được lưu vào nhiều nơi khác nhau (database, redis), tùy theo việc bạn cài đặt trong env. Ví dụ, nếu bạn muốn lưu job vào database:

và nhớ đừng quên chạy

Tạo job

Đầu tiên bạn cần tạo cho mình 1 job để xử lý công việc của bạn. Ví dụ ở đây mình cần gửi mail reset mật khẩu

Và trong app/Jobs của mình sẽ có file SendEmailResetPassword.php như sau:

Ở đây mình đã truyền một ít dữ liệu vào để xử lý chứ mặc định không có những cái này đâu nhé 😄

Tạo template email

Các bạn hãy chạy lệnh sau

Và giờ hãy vào app/Mail và bạn sẽ thấy file vừa tạo. Hiểu cơ bản thì đây sẽ là file giúp bạn bind data vào trong mail và gửi cho người dùng

Tiếp tợi hãy tạo một file blade nhé. Như ở trên thì mình sẽ tạo file reset-password.blade.php trong views/mail

Dispatch Job

Và giờ, ở trong Controller bạn hãy disptach job của mình nhé

Chạy các jobs trong queue

Để chạy các jobs thì các bạn hãy dùng lệnh:

--tries=3 sẽ là số lần bạn thực hiện lại job đó nếu bị fail. Còn một vài thông số nữa về thời gian chờ, thời gian nghỉ,.. thì các bạn chịu khó lên docs của Laravel và đọc nhé, ở đây mình sẽ chỉ giới thiệu qua như vậy 😄

Cách chạy queue trên server

Ơ nhưng mà chẳng lẽ lúc nào chúng ta cũng phải chạy queue:work ở trên server ư. Tất nhiên là không rồi, bạn có thể xử dụng supervisor để giám sát xử lý các queue trên server. Để cài đặt bàn hãy dùng câu lệnh

Các file cấu hình sẽ nằm trong thư mục etc/supervisor/conf.d. Ở đây bạn hãy tạo file reset-password.conf và cấu hình như sau nhé

Sau đó lưu lại và chạy các lệnh sau nhé:

Bài viết của mình đến đây thôi, mong phần nào giúp ích được cho mọi người 😄. Nếu có gì chưa đúng thì mọi người bình luận cho mình biết nhé

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo