Skip to content

Repository files navigation

RabbitMQ Learning

Projeto simples em PHP para estudar mensageria com RabbitMQ usando a biblioteca php-amqplib/php-amqplib.

O repositório está dividido em dois exemplos:

  • tutorial1/: exemplo básico de produtor e consumidor com a fila hello
  • tutorial2/: simulação de envio de e-mails com múltiplos workers consumindo a fila email_send_queue

Requisitos

  • PHP 8.x
  • Composer
  • RabbitMQ rodando localmente em localhost:5672
  • credenciais padrão do RabbitMQ: guest / guest

Instalação

composer install

Tutorial 1

Consumidor:

php tutorial1/receive.php

Produtor:

php tutorial1/send.php

Esse exemplo envia várias mensagens Hello World! para a fila hello.

Tutorial 2

O segundo exemplo simula um sistema de disparo de e-mails. O produtor cria um lote de mensagens e os workers consomem uma por vez, confirmando o processamento com ack.

Inicie um ou mais workers em terminais diferentes:

php tutorial2/worker.php

Depois publique o lote de e-mails:

php tutorial2/new_task.php "Campanha promocional da semana"

O produtor envia 100 jobs de e-mail para a fila email_send_queue. Cada mensagem contém:

  • email_id
  • to
  • subject
  • message

RabbitMQ

Para ver as filas do servidor RabbitMQ rodando no Ubuntu:

sudo rabbitmqctl list_queues

Para excluir (matar) uma fila do RabbitMQ:

sudo rabbitmqctl delete_queue nome_da_fila

Se quiser limpar uma fila sem apagá-la, use:

sudo rabbitmqctl purge_queue nome_da_fila

Observações

  • As filas foram declaradas como quorum
  • O tutorial2/worker.php usa basic_qos com prefetch 1 para distribuir melhor os jobs entre vários workers
  • O tempo de sleep() no worker serve apenas para simular o processamento do envio