Middle
Wat is RabbitMQ?
sobes.tech AI
Antwoord van AI
RabbitMQ is een berichtenbroker die het AMQP (Advanced Message Queuing Protocol) protocol implementeert. Het stelt applicaties in staat om asynchroon te communiceren door berichten via een gecentraliseerd systeem te verzenden en te ontvangen. RabbitMQ zorgt voor betrouwbare levering, routering en opslag van berichten.
Belangrijkste componenten:
- Producer (Producent): Verstuurt berichten naar RabbitMQ.
- Exchange (Uitwisseling): Ontvangt berichten van producenten en leidt ze door op basis van routeringsregels (binding).
- Queue (Wachtrij): Slaat berichten op totdat ze door consumenten worden opgehaald.
- Consumer (Consument): Ontvangt berichten uit de wachtrijen voor verwerking.
Types exchanges:
- Direct: Routeert berichten naar wachtrijen waar de routeringsleutel exact overeenkomt met de bindsleutel van de wachtrij.
- Fanout: Routeert berichten naar alle verbonden wachtrijen, ongeacht de routeringsleutel.
- Topic: Routeert berichten op basis van gedeeltelijke overeenkomsten van de routeringsleutel met een patroon van bindsleutels (gebruikmakend van
*en#). - Headers: Routeert berichten op basis van de headers van het bericht, niet op basis van de routeringsleutel.
Toepassingen in PHP-ontwikkeling:
- Uitgestelde taakverwerking: Bijvoorbeeld, e-mail verzenden, rapporten genereren, afbeeldingen verwerken.
- Microservice-architectuur: Asynchrone interactie tussen services.
- Realtime systemen: Verwerking van grote stroom gebeurtenissen.
- Load balancing: Verdeling van taken over meerdere workers.
Voorbeeld van het verzenden van een bericht met behulp van de php-amqplib bibliotheek:
<?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] Verzonden '" . $data . "'\n";
$channel->close();
$connection->close();
Voorbeeld van het ontvangen van een bericht:
<?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 " [*] Wacht op berichten. Druk op CTRL+C om te stoppen\n";
$callback = function ($msg) {
echo " [x] Ontvangen '" . $msg->body . "'\n";
};
$channel->basic_consume('my_queue', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();
RabbitMQ biedt fouttolerantie, schaalbaarheid en flexibiliteit bij het ontwerpen van gedistribueerde systemen.