Modo de Trabalho do RabbitMQ em PHP

O Modo de trabalho no RabbitMQ envolve configurar vários consumidores para processar mensagens da mesma fila, o que pode aumentar a velocidade de processamento concorrente de mensagens. A arquitetura é mostrada no diagrama abaixo:

Modo de trabalho do RabbitMQ

Nota: Independentemente do modo de trabalho do RabbitMQ utilizado, cada fila suporta vários consumidores e uma mensagem na mesma fila será processada apenas por um dos consumidores.

1. Tutorial Pré-Requisito

Por favor, leia as seguintes seções para entender o conhecimento relevante:

2. Implementando Múltiplos Consumidores em PHP

O PHP em si não suporta tecnologias concorrentes como multithreading e corotinas, então normalmente usa multiprocessos para alcançar processamento simultâneo. Aqui, usamos o modo multiprocesso para implementar consumidores concorrentes processando mensagens na fila.

2.1. Iniciando Manualmente Múltiplos Processos

Para implementar múltiplos processos, a maneira mais simples é executar manualmente o comando PHP várias vezes.

Por exemplo: Supondo que o script consumidor da seção anterior seja recv.php, podemos abrir várias janelas do terminal e executar repetidamente o script consumidor assim:

php recv.php

php recv.php

Ou na mesma janela do terminal, colocar o script em segundo plano para executar assim:

php recv.php &
php recv.php &

Explicação: A desvantagem de implementar múltiplos consumidores dessa maneira manual é que os processos não são bem mantidos, sem monitoramento de processo. Se um processo falhar, não será reiniciado automaticamente.

2.2. Usando o Supervisor para Implementar Múltiplos Processos

O Supervisor é um monitor de processos no sistema operacional Linux, que pode monitorar processos PHP. Se um processo PHP falhar, será reiniciado automaticamente. Também é possível configurar a concorrência de processos, facilitando o alcance do processamento simultâneo de múltiplos consumidores.

Aqui está um exemplo usando o Ubuntu, similar para outras distribuições Linux.

Instalando o Supervisor

sudo apt-get install supervisor

Configurando o Supervisor

O arquivo de configuração do Supervisor geralmente está localizado no diretório /etc/supervisor/conf.d. Neste diretório, você pode criar qualquer número de arquivos de configuração para informar ao Supervisor como monitorar nossos processos. Por exemplo, crie um arquivo rabbitmq-worker.conf para monitorar nossos processos consumidores.

Exemplo: Arquivo: 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

Explicação dos parâmetros:

  • process_name: Definição do nome do processo, que pode ser nomeado arbitrariamente. Aqui, são usadas duas variáveis: program_name (nome do processo) e process_num (número do processo).
  • command: O comando que precisamos executar.
  • autostart: Se deve iniciar automaticamente na inicialização.
  • autorestart: Se deve reiniciar automaticamente.
  • user: Qual conta do sistema usar para executar o comando.
  • numprocs: Número de processos concorrentes, indicando quantos processos iniciar.
  • stdout_logfile: Onde o arquivo de log de execução é salvo.