Xử lý nhiều hàng đợi trong Laravel (laravel queue) với supervisor

Supervisor Supervisor là một hệ thống client/server được sử dụng để kiểm soát một số những tiến trình cụ thể của hệ điều hành UNIX, cụ thể hơn là các quy trình liên quan tới một dự án hoặc một khách hàng. Ví dụ, bạn có thể sử dụng supervisor để quản lý hàng đợi

Supervisor

Supervisor là một hệ thống client/server được sử dụng để kiểm soát một số những tiến trình cụ thể của hệ điều hành UNIX, cụ thể hơn là các quy trình liên quan tới một dự án hoặc một khách hàng. Ví dụ, bạn có thể sử dụng supervisor để quản lý hàng đợi trong ứng dụng Laravel của bạn.

Các thành phần của supervisor bao gồm:

  • supervisor: phần máy chủ của hệ thống
  • supervisorctl: giao diện dòng lệnh để tương tác với server
  • Web server: Một giao diện web đơn giản để trực quan hóa một số chức năng cơ bản của supervisorctl
  • XML-RPC Interface: Giống với HTTP server sử dụng bởi web client, XML-RPC Interface có thể được sử dụng để điều khiển các chương trình của supervisor

Install supervisor

sudoapt-getinstall supervisor

check status:

sudo systemctl status supervisor.service

Start supervisor server

Kiểm tra trạng thái của supervisor server:

sudo systemctl status supervisor.service

Tương tự để khởi động, tắt, tạm dừng chúng ta lần lượt thay status bằng enable, start, stop, disable (xem kỹ hơn kiểm tra một dịch vụ trên Ubuntu)

Thêm một chương trình mới

Các chương trình do supervisor điều khiển phải là các chương trình khác nhau. Mỗi chương trình sẽ được quản lý và khai báo bới 1 file cấu hình độc lập, trong file cấu hình sẽ cấu hình đường dẫn thực thi, một số biến môi trường, các thực hiện trong trường hợp tắt máy, khởi động lại,…

Tệp cấu hình được tạo sẽ được đặt tại thư mục /etc/supervisor/conf.d/ hoặc nếu bạn không muốn đặt chúng ở đây thì phải khai báo cho supervisor biết đường dẫn file cấu hình của bạn tại phần [include] trong file /etc/supervisor/supervisord.conf, ví dụ như sau:

[include]
files = /etc/supervisor/conf.d/*.conf /home/trannguyenhan/laravel-project/laravel-worker.conf

Chúng ta cũng có thể thấy các file đặt trong /etc/supervisor/conf.d/ được thực hiện vì chúng đã được khai báo mặc định sẵn.

Chi tiết hơn về phần thêm chương trình mình sẽ để tới phần sau chúng ta sẽ đi chi tiết hơn tới ví dụ chạy laravel queue với supervisor.

Sau khi thêm một chương trình mới, chúng ta nên chạy hai lệnh sau, để thông báo cho máy chủ đọc lại các tệp cấu hình và áp dụng bất kỳ thay đổi nào:

sudo supervisorctl reread
sudo supervisorctl update

Chạy Laravel queue với supervisor

Như ở phần trên đã nói thì chúng ta sẽ phải tạo 1 file config, trong trường hợp này thì việc tạo file config tại thư mục /etc/supervisor/conf.d là rất khó kiểm soát, vì thế chúng ta sẽ tạo ngay 1 file config tại project laravel của chúng ta và dẫn đường dẫn file cấu hình tại /etc/supervisor/supervisord.conf.

Tạo một file laravel-worker.conf tại thư mục chính của project Laravel:

[program:laravel-worker]  
process_name=%(program_name)s_%(process_num)02d  
command=php /home/trannguyenhan/laravel-project/artisan queue:listen --tries=3  
autostart=true  
autorestart=true  
stopasgroup=true  
killasgroup=true  
user=trannguyenhan  
numprocs=1  
redirect_stderr=true  
stdout_logfile=/home/trannguyenhan/laravel-project/storage/logs/worker.log  
stopwaitsecs=30

Trong đó:

  • autostart: thông báo là chương trình sẽ tự động được khởi động khi supervisor được khởi động
  • autorestart: nếu chương trình bị tắt vì bất cứ lý do gì, lệnh này sẽ thông báo cho supervisor khởi động lại chương trình
  • stderr_logfile, stdout_logfile: định nghĩa đường dẫn log đầu ra và log lỗi
  • redirect_stderr: nếu là true thì stderr sẽ bị redirect để xuất vào file chỉ định ở stdout_logfile
  • numprocs: số lượng tiến trình mà Supervisor sẽ chạy. Ví dụ để gửi mail, ta để numprocs=4, nghĩa là 4 tiến trình cùng chạy task gửi mail.
  • Xem thêm các section value khác tại đây: http://supervisord.org/configuration.html#program-x-section-values

Sau khi cấu hình xong, chúng ta sẽ chạy lại 2 lệnh sau để supervisor đọc lại tệp cấu hình và áp dụng thay đổi:

sudo supervisorctl reread
sudo supervisorctl update

Sau đó start laravel-worker:

sudo supervisorctl start laravel-worker:*

Tương tự các lệnh stop, restart lần lượt để tắt và khởi động lại worker.

Ngoài ra chúng ta cũng có thể sử dụng superviserctl để tắt, bật, xem chi tiết các worker.

Webserver client

Như phần đầu chúng ta nói thì supervisor cung cấp 1 giao diện trực quan sử dụng một số các chức năng cơ bản, ban đầu thì nó không được cấu hình mặc định, để cấu hình webserver client, thêm vào file /etc/supervisor/supervisord.conf của bạn dòng sau:

[inet_http_server]
port=*:10001
username=trannguyenhan
password=2000

Với:

  • port: cổng bất kì sao cho không trùng với cổng dịch vụ nào khác đang chạy
  • usernamepassơrd: thông tin đăng nhập bạn mong muốn khi vào webserver client

Thoát ra, khởi động lại supervisor sau đó truy cập vào cổng bạn đã cấu hình để xem:

sudo systemctl restart supervisor.service

Tìm hiểu thêm chạy supervisor trên docker: https://docs.docker.com/config/containers/multi-service_container/

Tham khảo: https://www.vultr.com/, https://www.digitalocean.com/, https://youtube.com/, https://viblo.asia/

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ