Middle
O que é o RabbitMQ?
sobes.tech IA
Resposta da IA
RabbitMQ é um intermediário de mensagens que implementa o protocolo AMQP (Protocolo Avançado de Enfileiramento de Mensagens). Permite às aplicações interagir de forma assíncrona, enviando e recebendo mensagens através de um sistema centralizado. O RabbitMQ garante uma entrega fiável, roteamento e armazenamento de mensagens.
Componentes principais:
- Produtor (Producer): Envia mensagens ao RabbitMQ.
- Intercambiador (Exchange): Recebe mensagens dos produtores e as direciona para uma ou várias filas com base em regras de roteamento (binding).
- Fila (Queue): Armazena mensagens até que sejam recolhidas pelos consumidores.
- Consumidor (Consumer): Recebe mensagens das filas para processamento.
Tipos de intercambiadores:
- Direct: Roteia mensagens para filas onde a chave de roteamento corresponde exatamente à chave de ligação da fila.
- Fanout: Roteia mensagens para todas as filas ligadas, ignorando a chave de roteamento.
- Topic: Roteia mensagens com base em correspondências parciais da chave de roteamento com um padrão de chave de ligação (usando os símbolos
*e#). - Headers: Roteia mensagens com base nos cabeçalhos da mensagem, não na chave de roteamento.
Aplicações em desenvolvimento PHP:
- Processamento diferido de tarefas: Por exemplo, envio de emails, geração de relatórios, processamento de imagens.
- Arquitetura de microserviços: Interação assíncrona entre serviços.
- Sistemas em tempo real: Processamento de grandes fluxos de eventos.
- Balanceamento de carga: Distribuição de tarefas entre vários trabalhadores.
Exemplo de envio de mensagem usando a biblioteca php-amqplib:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->exchange_declare('my_exchange', 'direct', false, false, false);
$channel->queue_declare('my_queue', false, false, false, false);
$channel->queue_bind('my_queue', 'my_exchange', 'my_routing_key');
$data = 'Hello, RabbitMQ!';
$msg = new AMQPMessage($data);
$channel->basic_publish($msg, 'my_exchange', 'my_routing_key');
echo " [x] Enviado '" . $data . "'\n";
$channel->close();
$connection->close();
Exemplo de receção de mensagem:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('my_queue', false, false, false, false);
echo " [*] A aguardar mensagens. Para sair, pressione CTRL+C\n";
$callback = function ($msg) {
echo " [x] Recebido '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
O RabbitMQ fornece resistência a falhas, escalabilidade e flexibilidade no projeto de sistemas distribuídos.