Режим работы в RabbitMQ

Режим работы Work в RabbitMQ предполагает настройку нескольких потребителей для обработки сообщений из одной и той же очереди, что может увеличить параллельную скорость обработки сообщений. Архитектура показана на диаграмме ниже:

RabbitMQ Work Mode

Примечание: независимо от используемого режима работы RabbitMQ, каждая очередь поддерживает несколько потребителей, и сообщение в одной и той же очереди будет обрабатываться только одним из потребителей.

1. Руководство по подготовке

Пожалуйста, прочтите следующие разделы, чтобы понять соответствующие знания:

2. Реализация нескольких потребителей на PHP

PHP сам по себе не поддерживает конкурентные технологии, такие как многопоточность и корутины, поэтому обычно использует многопроцессный подход для достижения параллельной обработки. Здесь мы используем режим многопроцессности для реализации параллельной обработки потребителей сообщений в очереди.

2.1. Ручной запуск нескольких процессов

Чтобы реализовать несколько процессов, самым простым способом является ручное выполнение команды PHP несколько раз.

Например: Предположим, что скрипт потребителя из предыдущего раздела называется recv.php, мы можем открыть несколько окон терминала и повторно выполнить скрипт потребителя следующим образом:

php recv.php

php recv.php

Или в том же окне терминала поместить скрипт в фоновый режим для выполнения следующим образом:

php recv.php &
php recv.php &

Объяснение: Недостаток реализации нескольких потребителей в этот ручной способ заключается в том, что процессы не поддерживаются должным образом, нет мониторинга процессов. Если процесс завершится аварийно, он не будет автоматически перезапущен.

2.2. Использование Supervisor для реализации нескольких процессов

Supervisor - это монитор процессов в операционной системе Linux, который может отслеживать процессы PHP. Если процесс PHP завершится аварийно, он будет автоматически перезапущен. Также можно настроить параллельность процессов, что позволяет легко достигнуть параллельной обработки нескольких потребителей.

Вот пример использования в Ubuntu, аналогично для других дистрибутивов Linux.

Установка Supervisor

sudo apt-get install supervisor

Настройка Supervisor

Файл конфигурации для Supervisor обычно находится в каталоге /etc/supervisor/conf.d. В этом каталоге можно создать любое количество файлов конфигурации, чтобы указать Supervisor, как отслеживать наши процессы. Например, создайте файл rabbitmq-worker.conf для отслеживания наших процессов потребителя.

Пример: Файл: 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

Пояснение параметров:

  • process_name: Определение имени процесса, может быть произвольным. Здесь используются две переменные: program_name (имя процесса) и process_num (номер процесса).
  • command: Команда, которую нам нужно запустить.
  • autostart: Запускать ли автоматически при загрузке.
  • autorestart: Автоматически перезапускать ли.
  • user: Какую учетную запись системы использовать для выполнения команды.
  • numprocs: Количество параллельных процессов, указывает, сколько процессов нужно запустить.
  • stdout_logfile: Где сохраняется файл журнала выполнения.