Middle
Čo je RabbitMQ?
sobes.tech AI
Odpoveď od AI
RabbitMQ je broker správ, ktorý implementuje protokol AMQP (Advanced Message Queuing Protocol). Umožňuje aplikáciám asynchrónne komunikovať odosielaním a prijímaním správ prostredníctvom centralizovaného systému. RabbitMQ zabezpečuje spoľahlivé doručenie, smerovanie a ukladanie správ.
Hlavné komponenty:
- Producent (Producer): Odosiela správy do RabbitMQ.
- Exchange (Exchange): Prijíma správy od producentov a ich smeruje do jednej alebo viacerých front na základe pravidiel smerovania.
- Fronta (Queue): Ukladá správy, kým ich neprevezmú spotrebitelia.
- Spotrebiteľ (Consumer): Prijíma správy z front na spracovanie.
Typy exchange:
- Direct: Smeruje správy do front, kde kľúč smerovania presne zodpovedá kľúču väzby frontu.
- Fanout: Smeruje správy do všetkých pripojených front, ignorujúc kľúč smerovania.
- Topic: Smeruje správy na základe čiastočnej zhody kľúča smerovania s vzorom kľúča väzby (použitím znakov
*a#). - Headers: Smeruje správy na základe hlavičiek správy, nie kľúča smerovania.
Použitie v PHP:
- Odložené spracovanie úloh: napr. odosielanie emailov, generovanie správ, spracovanie obrázkov.
- Mikroslužbová architektúra: Asynchrónna komunikácia medzi službami.
- Systémy v reálnom čase: Spracovanie veľkého toku udalostí.
- Vyvažovanie záťaže: Rozdeľovanie úloh medzi viacerých pracovníkov.
Príklad odoslania správy pomocou knižnice 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] Odoslané '" . $data . "'\n";
$channel->close();
$connection->close();
Príklad prijatia správy:
<?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 " [*] Čaká sa na správy. Pre ukončenie stlačte CTRL+C\n";
$callback = function ($msg) {
echo " [x] Prijaté '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
RabbitMQ zabezpečuje odolnosť voči chybám, škálovateľnosť a flexibilitu pri navrhovaní distribuovaných systémov.