elvisthermiranda / rabbitmq-laravel
Um pacote para integrar o rabbitmq ao job do laravel
Installs: 2
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/elvisthermiranda/rabbitmq-laravel
Requires
- php: >=8.1
- illuminate/container: ^10.0|^11.0|^12.0
- illuminate/contracts: ^10.0|^11.0|^12.0
- illuminate/queue: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
- php-amqplib/php-amqplib: ^3.7
README
Um pacote Laravel que adiciona suporte ao RabbitMQ como driver de queue, permitindo rodar jobs com o comando nativo:
php artisan queue:work rabbitmq
Também oferece uma facade Rabbit para publicar e consumir mensagens diretamente, com suporte a exchanges, routing keys e delays.
📦 Instalação
composer require elvisthermiranda/rabbitmq-laravel
⚙️ Configuração
No config/queue.php adicione a conexão rabbitmq:
'rabbitmq' => [ 'driver' => 'rabbitmq', 'host' => env('RABBITMQ_HOST', '127.0.0.1'), 'port' => env('RABBITMQ_PORT', 5672), 'username' => env('RABBITMQ_USER', 'guest'), 'password' => env('RABBITMQ_PASSWORD', 'guest'), 'vhost' => env('RABBITMQ_VHOST', '/'), 'queue' => env('RABBITMQ_QUEUE', 'default'), 'exchange' => [ 'name' => env('RABBITMQ_EXCHANGE', 'app_exchange'), 'type' => env('RABBITMQ_EXCHANGE_TYPE', 'direct'), 'durable' => true, 'auto_delete' => false, 'args' => [], ], ],
Arquivo .env:
QUEUE_CONNECTION=rabbitmq RABBITMQ_HOST=127.0.0.1 RABBITMQ_PORT=5672 RABBITMQ_USER=guest RABBITMQ_PASSWORD=guest RABBITMQ_VHOST=/ RABBITMQ_QUEUE=default RABBITMQ_EXCHANGE=app_exchange RABBITMQ_EXCHANGE_TYPE=direct
🚀 Uso com Jobs do Laravel
Crie um job normalmente:
php artisan make:job ProcessExampleJob
namespace App\Jobs; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Log; class ProcessExampleJob implements ShouldQueue { public function handle() { Log::info("RabbitMQ job executado com sucesso!"); } }
Dispare o job:
ProcessExampleJob::dispatch();
Execute:
php artisan queue:work rabbitmq
🧩 Uso direto com a Facade Rabbit
1. Publicar mensagem
Rabbit::push('example', ['msg' => 'olá mundo']);
2. Publicar várias mensagens
Rabbit::pushBatch('example', [ ['msg' => 'primeira'], ['msg' => 'segunda'], ]);
3. Consumir mensagens
Rabbit::consume('example', function ($data, $msg) { echo "Mensagem recebida: " . json_encode($data) . PHP_EOL; Rabbit::ack($msg); });
4. Consumir uma única mensagem (teste)
Rabbit::consumeOne('example', function ($data, $msg) { echo "Mensagem única: " . json_encode($data) . PHP_EOL; Rabbit::ack($msg); });
5. NACK com requeue
Rabbit::consume('example', function ($data, $msg) { if (!isset($data['processar'])) { Rabbit::nack($msg, true); // devolve para a fila return; } Rabbit::ack($msg); });
⏳ Mensagens com Delay
1. Delay básico (TTL + DLX)
Funciona em qualquer RabbitMQ, cria uma fila example-delayed automaticamente:
Rabbit::later('example', ['msg' => 'executar daqui a 10s'], 10);
2. Delay com Plugin Oficial (x-delayed-message)
Mais flexível, cada mensagem pode ter um delay diferente.
Habilite o plugin no RabbitMQ:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
Uso:
Rabbit::publishDelayed('example', ['msg' => 'executar daqui a 5s'], 5000);
Com routing key customizada:
Rabbit::publishDelayed('emails', ['msg' => 'bem-vindo'], 10000, 'email.welcome');
🛠 Dependências
- php-amqplib/php-amqplib
- Illuminate components:
support,contracts,queue,container
📖 Roadmap
- Suporte básico ao RabbitMQ (
push,pop,ack,nack) - Suporte a delay via TTL/DLX
- Suporte a delay via plugin oficial (
x-delayed-message) - Suporte a múltiplos exchanges e routing keys
- Testes automatizados
📜 Licença
MIT License — veja o arquivo LICENSE.