Sobes.tech
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.