Middle
Mi az a RabbitMQ?
sobes.tech MI
Válasz az MI-től
A RabbitMQ egy üzenetbroker, amely az AMQP (Advanced Message Queuing Protocol) protokollt valósítja meg. Lehetővé teszi az alkalmazások számára, hogy aszinkron módon kommunikáljanak, üzeneteket küldve és fogadva egy központosított rendszeren keresztül. A RabbitMQ megbízható kézbesítést, útvonalválasztást és üzenettárolást biztosít.
Fő összetevők:
- Producens (Producer): Üzeneteket küld a RabbitMQ-nak.
- Exchange (Exchange): Fogadja az üzeneteket a producerektől, és az útvonalválasztási szabályok szerint egy vagy több sorba irányítja őket.
- Queue (Sor): Tárolja az üzeneteket, amíg a fogyasztók el nem veszik őket.
- Consumer (Fogyasztó): Üzeneteket fogad a sorokból feldolgozás céljából.
Az exchange típusai:
- Direct: Az üzeneteket olyan sorokba irányítja, ahol az útvonal-kulcs pontosan megegyezik a sor kötéskulcsával.
- Fanout: Az üzeneteket minden kötött sorba továbbítja, figyelmen kívül hagyva az útvonal-kulcsot.
- Topic: Az üzeneteket az útvonal-kulcs részleges egyezése alapján irányítja, a kötéskulcs mintázatával (az
*és#karakterek használatával). - Headers: Az üzeneteket a fejlécük alapján irányítja, nem az útvonal-kulcs szerint.
PHP-ben való alkalmazás:
- Feladatok késleltetett feldolgozása: pl. email küldése, jelentések generálása, képfeldolgozás.
- Mikroszolgáltatás architektúra: Aszinkron kommunikáció a szolgáltatások között.
- Valós idejű rendszerek: Nagy eseménymennyiség feldolgozása.
- Terheléselosztás: Feladatok elosztása több munkavégző között.
Üzenet küldés példája a php-amqplib könyvtár segítségével:
<?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] Sent '" . $data . "'\n";
$channel->close();
$connection->close();
Üzenet fogadásának példája:
<?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 " [*] Várakozás üzenetekre. Kilépéshez nyomja meg a CTRL+C-t\n";
$callback = function ($msg) {
echo " [x] Megkapva '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
A RabbitMQ megbízható hibamentes működést, skálázhatóságot és rugalmasságot biztosít elosztott rendszerek tervezéséhez.