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:
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:
- Các Khái Niệm Cốt Lõi của RabbitMQ
- Chế độ làm việc của RabbitMQ
- Bắt đầu Nhanh với PHP trong RabbitMQ (Phải đọc, vì các phần sau sẽ không trùng lặp mã, chỉ hiển thị mã chính)
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.