Chế độ làm việc của RabbitMQ PHP

Chế độ làm việc trong RabbitMQ liên quan đến cấu hình nhiều người tiêu thụ để xử lý các thông điệp từ cùng một hàng đợi, điều này có thể tăng tốc độ xử lý đồng thời của các thông điệp. Kiến ​​trúc được hiển thị trong sơ đồ dưới đây:

RabbitMQ Work Mode

Ghi chú: Bất kể chế độ làm việc của RabbitMQ được sử dụng, mỗi hàng đợi đều hỗ trợ nhiều người tiêu thụ và một thông điệp trong cùng một hàng đợi chỉ sẽ được xử lý bởi một trong những người tiêu thụ.

1. Hướng dẫn tiên quyết

Vui lòng đọc các phần sau đây để hiểu kiến thức liên quan:

2. Triển khai Nhiều Người Tiêu Thụ trong PHP

PHP chính nó không hỗ trợ các công nghệ đồng thời như multi-threading và coroutines, vì vậy thường sử dụng multi-process để đạt được xử lý đồng thời. Ở đây, chúng ta sử dụng chế độ multi-process để triển khai người tiêu thụ xử lý thông điệp đồng thời trong hàng đợi.

2.1. Bắt đầu Nhiều Tiến trình Thủ Công

Để triển khai nhiều tiến trình, cách đơn giản nhất là chạy lệnh PHP nhiều lần thủ công.

Ví dụ: Giả sử tệp script người tiêu thụ từ phần trước là recv.php, chúng ta có thể mở nhiều cửa sổ shell và lặp lại thực thi tệp script người tiêu thụ như sau:

php recv.php

php recv.php

Hoặc trong cùng một cửa sổ shell, đặt tệp script ở nền để chạy như thế này:

php recv.php &
php recv.php &

Giải thích: Nhược điểm của việc triển khai nhiều người tiêu thụ theo cách thủ công này là các tiến trình không được quản lý tốt, không có giám sát quá trình. Nếu một tiến trình gặp sự cố, nó sẽ không khởi động lại tự động.

2.2. Sử dụng Supervisor để Triển khai Nhiều Tiến trình

Supervisor là một trình giám sát quá trình trong hệ điều hành Linux, có thể giám sát các quá trình PHP. Nếu một quá trình PHP gặp sự cố, nó sẽ được khởi động lại tự động. Nó cũng có thể cấu hình đồng thời của các quá trình, làm cho việc đạt được xử lý đồng thời của nhiều người tiêu thụ dễ dàng.

Dưới đây là một ví dụ sử dụng Ubuntu, tương tự cho các bản phân phối Linux khác.

Cài đặt Supervisor

sudo apt-get install supervisor

Cấu hình Supervisor

Tệp cấu hình cho Supervisor thường được đặt trong thư mục /etc/supervisor/conf.d. Trong thư mục này, bạn có thể tạo bất kỳ số lượng tệp cấu hình nào để cho Supervisor biết cách giám sát các quá trình của chúng ta. Ví dụ, tạo một tệp rabbitmq-worker.conf để giám sát các quá trình người tiêu thụ của chúng ta.

Ví dụ: Tệp: rabbitmq-worker.conf

[program:rabbitmq-worker]
process_name=%(program_name)s_%(process_num)02d
command=php recv.php
autostart=true
autorestart=true
user=root
numprocs=10
redirect_stderr=true
stdout_logfile=/var/log/worker.log

Giải thích các tham số:

  • process_name: Định nghĩa tên quá trình, có thể đặt tên tuỳ ý. Ở đây, sử dụng hai biến: program_name (tên quá trình) và process_num (số thứ tự quá trình).
  • command: Lệnh chúng ta cần chạy.
  • autostart: Có khởi động tự động khi khởi động lại hay không.
  • autorestart: Có khởi động lại tự động hay không.
  • user: Sử dụng tài khoản hệ thống nào để chạy lệnh.
  • numprocs: Số lượng quá trình đồng thời, chỉ ra có bao nhiêu quá trình cần khởi động.
  • stdout_logfile: Nơi lưu tệp nhật ký chạy.