PHP RabbitMQ Arbeitsmodus

Der Arbeitsmodus in RabbitMQ beinhaltet die Konfiguration mehrerer Verbraucher zur Verarbeitung von Nachrichten aus derselben Warteschlange, was die gleichzeitige Verarbeitungsgeschwindigkeit von Nachrichten erhöhen kann. Die Architektur wird im folgenden Diagramm dargestellt:

RabbitMQ Arbeitsmodus

Hinweis: Unabhängig vom verwendeten RabbitMQ Arbeitsmodus unterstützt jede Warteschlange mehrere Verbraucher, und eine Nachricht in derselben Warteschlange wird nur von einem der Verbraucher verarbeitet.

1. Voraussetzungen Tutorial

Bitte lesen Sie die folgenden Abschnitte, um das relevante Wissen zu verstehen:

2. Implementierung mehrerer Verbraucher in PHP

PHP unterstützt an sich keine gleichzeitigen Technologien wie Multithreading und Koroutinen, weshalb es in der Regel Mehrprozess-Techniken verwendet, um gleichzeitige Verarbeitung zu erreichen. Hier verwenden wir den Mehrprozess-Modus, um gleichzeitige Verbraucher bei der Verarbeitung von Nachrichten in der Warteschlange zu implementieren.

2.1. Manuelles Starten mehrerer Prozesse

Um mehrere Prozesse zu implementieren, ist der einfachste Weg, das PHP-Kommando mehrmals manuell auszuführen.

Beispiel: Angenommen, das Verbraucher-Skript aus dem vorherigen Abschnitt ist recv.php, können wir mehrere Shell-Fenster öffnen und das Verbraucher-Skript wiederholt ausführen, wie folgt:

php recv.php

php recv.php

Oder im selben Shell-Fenster das Skript im Hintergrund ausführen:

php recv.php &
php recv.php &

Erklärung: Der Nachteil bei der Implementierung mehrerer Verbraucher auf diese manuelle Weise ist, dass die Prozesse nicht gut gepflegt werden, ohne Prozessüberwachung. Wenn ein Prozess abstürzt, wird er nicht automatisch neu gestartet.

2.2. Verwendung von Supervisor zur Implementierung mehrerer Prozesse

Supervisor ist ein Prozessmonitor im Linux-Betriebssystem, der PHP-Prozesse überwachen kann. Wenn ein PHP-Prozess abstürzt, wird er automatisch neu gestartet. Es kann auch die Konkurrenz von Prozessen konfigurieren, was es einfach macht, die gleichzeitige Verarbeitung mehrerer Verbraucher zu erreichen.

Hier ist ein Beispiel für die Verwendung unter Ubuntu, ähnlich für andere Linux-Distributionen.

Installation von Supervisor

sudo apt-get install supervisor

Konfiguration von Supervisor

Die Konfigurationsdatei für Supervisor befindet sich normalerweise im Verzeichnis /etc/supervisor/conf.d. In diesem Verzeichnis können Sie beliebig viele Konfigurationsdateien erstellen, um Supervisor mitzuteilen, wie er unsere Prozesse überwachen soll. Erstellen Sie zum Beispiel eine Datei rabbitmq-worker.conf, um unsere Verbraucherprozesse zu überwachen.

Beispiel: Datei: 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

Parametererklärung:

  • process_name: Definition des Prozessnamens, kann beliebig benannt werden. Hier werden zwei Variablen verwendet: program_name (Prozessname) und process_num (Prozessnummer).
  • command: Der Befehl, den wir ausführen müssen.
  • autostart: Ob beim Booten automatisch gestartet wird.
  • autorestart: Ob automatisch neu gestartet wird.
  • user: Welches Systemkonto verwendet wird, um den Befehl auszuführen.
  • numprocs: Anzahl der gleichzeitigen Prozesse, zeigt an, wie viele Prozesse gestartet werden sollen.
  • stdout_logfile: Wo die Laufprotokolldatei gespeichert wird.