Middle
Ce este RabbitMQ?
sobes.tech AI
Răspuns de la AI
RabbitMQ este un broker de mesaje care implementează protocolul AMQP (Protocolul Avansat de Cozi de Mesaje). Permite aplicațiilor să interacționeze asincron, trimițând și primind mesaje printr-un sistem centralizat. RabbitMQ asigură livrare fiabilă, rutare și stocare a mesajelor.
Componente principale:
- Producător (Producer): Trimite mesaje către RabbitMQ.
- Schimb (Exchange): Primește mesaje de la producători și le direcționează către una sau mai multe cozi în funcție de reguli de rutare (binding).
- Coada (Queue): Stochează mesajele până când sunt preluate de consumatori.
- Consumator (Consumer): Primește mesaje din cozi pentru procesare.
Tipuri de schimburi:
- Direct: Direcționează mesajele către cozi unde cheia de rutare corespunde exact cu cheia de legare a cozii.
- Fanout: Direcționează mesajele către toate cozile legate, ignorând cheia de rutare.
- Topic: Direcționează mesajele pe baza unor potriviri parțiale ale cheii de rutare cu un model de cheie de legare (folosind simbolurile
*și#). - Headers: Direcționează mesajele pe baza antetelor mesajului, nu a cheii de rutare.
Exemple de utilizare în dezvoltarea PHP:
- Procesarea întârziată a sarcinilor: De exemplu, trimiterea de emailuri, generarea de rapoarte, procesarea imaginilor.
- Arhitectură de microservicii: Interacțiune asincronă între servicii.
- Sisteme în timp real: Procesarea unui flux mare de evenimente.
- Echilibrare a încărcării: Distribuirea sarcinilor între mai mulți lucrători.
Exemplu de trimitere a unui mesaj folosind 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] Trimis '" . $data . "'\n";
$channel->close();
$connection->close();
Exemplu de primire a mesajului:
<?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șteaptă mesaje. Apăsați CTRL+C pentru a ieși\n";
$callback = function ($msg) {
echo " [x] Primite '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
RabbitMQ asigură reziliență la defecte, scalabilitate și flexibilitate în proiectarea sistemelor distribuite.