Middle
Τι είναι το RabbitMQ;
sobes.tech AI
Απάντηση από AI
Το RabbitMQ είναι ένας διαμεσολαβητής μηνυμάτων που υλοποιεί το πρωτόκολλο AMQP (Advanced Message Queuing Protocol). Επιτρέπει στις εφαρμογές να αλληλεπιδρούν ασύγχρονα, αποστέλλοντας και λαμβάνοντας μηνύματα μέσω ενός κεντρικού συστήματος. Το RabbitMQ παρέχει αξιόπιστη παράδοση, δρομολόγηση και αποθήκευση μηνυμάτων.
Βασικά συστατικά:
- Παραγωγός (Producer): Αποστέλλει μηνύματα στο RabbitMQ.
- Ανταλλακτής (Exchange): Λαμβάνει μηνύματα από παραγωγούς και τα κατευθύνει σε μία ή περισσότερες ουρές βάσει κανόνων δρομολόγησης.
- Ουρά (Queue): Αποθηκεύει μηνύματα μέχρι να τα παραλάβουν οι καταναλωτές.
- Καταναλωτής (Consumer): Λαμβάνει μηνύματα από τις ουρές για επεξεργασία.
Τύποι ανταλλακτών:
- Direct: Κατευθύνει μηνύματα σε ουρές όπου το κλειδί δρομολόγησης ταιριάζει ακριβώς με το κλειδί σύνδεσης της ουράς.
- Fanout: Κατευθύνει μηνύματα σε όλες τις συνδεδεμένες ουρές, αγνοώντας το κλειδί δρομολόγησης.
- Topic: Κατευθύνει μηνύματα βάσει μερικής ταύτισης του κλειδιού δρομολόγησης με το μοτίβο κλειδιού σύνδεσης (χρησιμοποιώντας τους χαρακτήρες
*και#). - Headers: Κατευθύνει μηνύματα βάσει των κεφαλίδων του μηνύματος, και όχι του κλειδιού δρομολόγησης.
Εφαρμογές στην PHP:
- Αναβολή επεξεργασίας εργασιών: π.χ., αποστολή email, δημιουργία αναφορών, επεξεργασία εικόνων.
- Μικροϋπηρεσίες: Ασύγχρονη αλληλεπίδραση μεταξύ υπηρεσιών.
- Συστήματα πραγματικού χρόνου: Επεξεργασία μεγάλου όγκου γεγονότων.
- Εξισορρόπηση φόρτου: Κατανομή εργασιών μεταξύ πολλαπλών εργαζομένων.
Παράδειγμα αποστολής μηνύματος με τη βιβλιοθήκη 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] Sent '" . $data . "'\n";
$channel->close();
$connection->close();
Παράδειγμα λήψης μηνύματος:
<?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 " [*] Waiting for messages. To exit press CTRL+C\n";
$callback = function ($msg) {
echo " [x] Received '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
Το RabbitMQ παρέχει ανθεκτικότητα σε σφάλματα, κλιμακωσιμότητα και ευελιξία στον σχεδιασμό κατανεμημένων συστημάτων.