Modalità di lavoro in RabbitMQ con PHP

La modalità di lavoro in RabbitMQ prevede la configurazione di più consumatori per elaborare i messaggi dalla stessa coda, il che può aumentare la velocità di elaborazione concorrente dei messaggi. L'architettura è mostrata nel diagramma qui sotto:

Modalità di lavoro in RabbitMQ

Nota: Indipendentemente dalla modalità di lavoro RabbitMQ utilizzata, ogni coda supporta più consumatori, e un messaggio nella stessa coda verrà elaborato solo da uno dei consumatori.

1. Tutorial Prerequisiti

Si prega di leggere le seguenti sezioni per comprendere le conoscenze rilevanti:

2. Implementazione di più consumatori in PHP

PHP stesso non supporta tecnologie concorrenti come il multithreading e le coroutine, quindi di solito utilizza i multi-processi per raggiungere l'elaborazione concorrente. Qui utilizziamo la modalità multi-processo per implementare più consumatori che elaborano messaggi nella coda.

2.1 Avvio manuale di processi multipli

Per implementare più processi, il modo più semplice è eseguire manualmente il comando PHP più volte.

Ad esempio: Supponendo che lo script consumatore della sezione precedente sia recv.php, possiamo aprire più finestre di shell ed eseguire ripetutamente lo script consumatore in questo modo:

php recv.php

php recv.php

Oppure nella stessa finestra di shell, mettere lo script in esecuzione in background in questo modo:

php recv.php &
php recv.php &

Spiegazione: Lo svantaggio dell'implementazione di più consumatori in questo modo manuale è che i processi non vengono gestiti correttamente, senza monitoraggio dei processi. Se un processo si interrompe, non verrà riavviato automaticamente.

2.2 Uso di Supervisor per implementare processi multipli

Supervisor è un monitor di processi nel sistema operativo Linux, che può monitorare i processi PHP. Se un processo PHP si interrompe, verrà riavviato automaticamente. È inoltre possibile configurare la concorrenza dei processi, facilitando l'elaborazione concorrente di più consumatori.

Ecco un esempio utilizzando Ubuntu, simile per altre distribuzioni Linux.

Installazione di Supervisor

sudo apt-get install supervisor

Configurazione di Supervisor

Il file di configurazione per Supervisor si trova di solito nella directory /etc/supervisor/conf.d. In questa directory, è possibile creare un qualsiasi numero di file di configurazione per indicare a Supervisor come monitorare i nostri processi. Ad esempio, creare un file rabbitmq-worker.conf per monitorare i nostri processi consumatori.

Esempio: File: 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

Spiegazione dei parametri:

  • process_name: Definizione del nome del processo, può essere nominato arbitrariamente. Qui vengono utilizzate due variabili: program_name (nome del processo) e process_num (numero del processo).
  • command: Il comando che dobbiamo eseguire.
  • autostart: Se avviare automaticamente all'avvio.
  • autorestart: Se riavviare automaticamente.
  • user: Quale account di sistema utilizzare per eseguire il comando.
  • numprocs: Numero di processi concorrenti, indicando quanti processi avviare.
  • stdout_logfile: Dove viene salvato il file di log in esecuzione.