Hàng đợi Queue trong framework laravel (Phần 1)

2nd Nov 2022
Hàng đợi Queue trong framework laravel
Table of contents

Trong laravel, Queue - hàng đợi được áp dụng xử lý các tác vụ độc lập, tốn nhiều thời gian cùng việc worker sẽ lắng nghe xử lý tuần tự FIFO các jobs. Ví dụ , bài toán Import CSV với 1 dữ liệu lớn hay yêu cầu gửi số lượng mail tới người dùng trong 1 request việc sử dụng queue để xử ngầm và độc lập tác tác vụ này làm tăng trải nghiệm về mặt người dùng khi không phải chờ đợi toàn bộ quy trình xử lý xong mới thực hiện tiếp được quy trình.

Vậy queue trong laravel có gì mọi người cùng mình tìm hiểu nhé!

1. Phân biệt connection và queues

Trong file cấu hình config/queue.php

  • Connection chứa thông tin kết nối với backend service như Amazon SQS, Beanstalk, hoặc Redis.
  • Bất kỳ queue connection có thể có nhiều "queues" mà có thể được coi như các stacks khác nhau hoặc các queued jobs và nếu bạn gửi 1 job mà không xác định queue nào gửi đến thì mặc định jobs sẽ được đặt tên là giá trị thuộc tính queue attribute cấu hình trong connection.
Queue

2. Queue drive chính

- Database

Thông tin của jobs được lưu trong bảng jobs sau khi run :

  • php artisan queue:table
  • php artisan migrate

- Sync

  • Jobs được xử lý ngay lập tức

- Amazon SQS

  • Dịch vụ cung cấp bên ngoài cần đăng kí dịch vụ

3. Một số lưu ý

- Cấu hình connection và queues khi gửi jobs

Queue
  • onConnection(): khi hệ thống có nhiều task vụ cần xử lý và mong muốn sử dụng đồng thời nhiều backend service khác nhau : database, aws, ...
  • onQueue(): định nghĩa nhiều queues trong cùng 1 connection tạo sự độc lập trong xử lý task vụ ( 1 queue chết và queue kia không bị ảnh hưởng).

- Độ trễ của job

Queue

Worker lắng nghe và gửi job xử lý sau khoảng thời gian delay.

- Job chaining

Queue

Thực hiện tuần từ các job và nếu 1 job chết sẽ dừng toàn bộ.

- Ghi log job

Queue

Kiểm tra thông tin tin job tại thời điểm bắt đầu hoặc kết thúc bằng event đăng kí tại AppServiceProvide.php

Queue

Sử dụng hàm failed() để xử lý lỗi và ghi log trạng thái lỗi

4. Command line sử dụng chính

- Tạo file job

php artisan make:job nameFileJob

- Run queue

php artisan queue:work -- attribute

Với attribute:

  1. -- tries : xác định tối đa một jobs được thực hiện
  2. -- timeout : thời gian gian tối đa job có thể chạy trong queue
  3. -- queue=name : queue worker lắng nghe
  4. -- once : worker chỉ lắng nghe một job duy nhất
  5. -- sleep : thời gian sleep khi không có job nào trong queue

- Kiểm tra log failed

php artisan queue:failed // danh sách log failed
php artisan queue:retry all / id // chạy lại toàn bộ hoặc 1 log failed cụ thể
php artisan queue:forget id // xóa 1 log failed
php artisan queue:flushed // xóa toàn bộ log failed

5. Cấu hình laravel queue trên môi trường production

- Cài đặt supervisor

**sudo apt-get install supervisor **

- Cấu hình cơ bản supervisor

Thư mục cấu hình : /etc/supervisor/conf.d

Queue

Với:

  • program : tên program : mọi người có thể đặt tên bất kỳ gì.
  • autostart : tiến trình tự động chạy sau khi supervisor khởi động hay không
  • autorestart : tiến trình tự động khởi động ngay sau khi nó bị tắt
  • user : user dùng để thực thi tiến trình
  • numprocs : số lượng tiến trình mà supervisor sẽ chạy
  • redirect_stderr : nếu là true thì stderr sẽ bị redirect để xuất vào file chỉ định ở stdout_logfile
  • stdout_logfile : đường dẫn tới file log của mình. File này ko cần tạo trước vì supervisor sẽ tự tạo cho mình

Sau khi cấu hình xong hãy restart supervisor

systemctl restart supervisor

or

sudo service supervisor restart

- Khởi động queue

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start tên program :
Bạn thấy bài viết này như thế nào?
1 reaction

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Danh sách này có 4 sản phẩm nên chưa cần phân trang, nếu số lượng sản phẩm lên đến vài chục sản phẩm

Hiện nay kiến trúc Microservices đang là chủ đề được cộng đồng Developer vô cùng quan tâm

Hôm nay chúng ta cùng tìm hiểu về Eloquent trong Laravel với mối quan hệ nhiều - nhiều (many to many relationship)

Kiểm soát hợp lí truy cập nội dung trang web là yếu tố quyết định trong việc điều hành một máy chủ bảo mật.

Trong lập trình web, authorization (phân quyền) là chức năng vô cùng quan trọng và không thể thiếu