- vừa được xem lúc

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

0 0 16

Người đăng: Nguyễn Quang Huy

Theo Viblo Asia

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

sudo apt-get install 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/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Được rồi, đi thôi!!! VPS free nè (^.^) [P1]

Bạn là sinh viên, bạn là lập trình viên khó khăn về mặt tài chính, bạn không có xiền thuê VPS, được rồi hãy đến đây!!!. Hôm nay mình sẽ hướng dẫn cho các bạn cách tạo VPS free bằng Github Workflow & N

0 0 59

- vừa được xem lúc

[Linux] Iptables trong hệ thống Linux

IPtables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng

0 0 44

- vừa được xem lúc

Từ bug format sai chuỗi số khi nhập bằng bàn phím tiếng Nhật, tới IME và các sự kiện composition trong JS

"Tự nhiên tui thấy hiện tượng lạ”. Khi nhập liệu một chuỗi các kí tự vào thẻ input, thông thường chúng ta nhập thế nào thì hiển thị thế ấy, không làm phép biến đổi gì cả.

0 0 48

- vừa được xem lúc

Tạo Rijndael S-box sử dụng trong AES

I. Rijndael S-box là gì .

0 0 37

- vừa được xem lúc

Giới thiệu về lỗ hổng tràn bộ đệm (Buffer Overflow) và cách khai thác

Khái niệm. Lỗ hổng tràn bộ đệm (Buffer Overflow) là lỗ hổng trong lập trình, cho phép dữ liệu được ghi vào một buffer có thể tràn ra ngoài buffer đó, ghi đè lên dữ liệu khác và dẫn tới hoạt động bất t

0 0 42

- vừa được xem lúc

Share Libraries Hijacking trên Linux

1. Cách thức hoạt động của Share Libraries.

0 0 28