Sobes.tech
Middle

Was ist RabbitMQ?

sobes.tech KI

Antwort von AI

RabbitMQ ist ein Nachrichtenbroker, der das AMQP-Protokoll (Advanced Message Queuing Protocol) implementiert. Es ermöglicht Anwendungen, asynchron zu interagieren, indem sie Nachrichten über ein zentrales System senden und empfangen. RabbitMQ sorgt für zuverlässige Zustellung, Routing und Speicherung von Nachrichten.

Hauptkomponenten:

  • Producer (Erzeuger): Sendet Nachrichten an RabbitMQ.
  • Exchange (Austausch): Empfängt Nachrichten von Produzenten und leitet sie basierend auf Routing-Regeln (Binding) an eine oder mehrere Warteschlangen weiter.
  • Queue (Warteschlange): Speichert Nachrichten, bis sie von Konsumenten abgeholt werden.
  • Consumer (Verbraucher): Empfängt Nachrichten aus den Warteschlangen zur Verarbeitung.

Arten von Austauschen:

  • Direct: Leitet Nachrichten an Warteschlangen, bei denen der Routing-Schlüssel genau mit dem Bindeschlüssel der Warteschlange übereinstimmt.
  • Fanout: Leitet Nachrichten an alle verbundenen Warteschlangen, unabhängig vom Routing-Schlüssel.
  • Topic: Leitet Nachrichten basierend auf partiellen Übereinstimmungen des Routing-Schlüssels mit einem Bindemuster (unter Verwendung der Symbole * und #).
  • Headers: Leitet Nachrichten basierend auf den Kopfzeilen der Nachricht, nicht auf dem Routing-Schlüssel.

Anwendungen in der PHP-Entwicklung:

  • Verzögertes Aufgaben-Processing: Zum Beispiel E-Mail-Versand, Berichtsgenerierung, Bildverarbeitung.
  • Mikrodienst-Architektur: Asynchrone Interaktion zwischen Diensten.
  • Echtzeitsysteme: Verarbeitung großer Ereignisströme.
  • Lastverteilung: Verteilung von Aufgaben auf mehrere Arbeiter.

Beispiel für das Senden einer Nachricht mit der Bibliothek 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] Gesendet '" . $data . "'\n";

$channel->close();
$connection->close();

Beispiel für den Empfang einer Nachricht:

<?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 " [*] Warte auf Nachrichten. Zum Beenden CTRL+C drücken";

$callback = function ($msg) {
    echo " [x] Empfangen '" . $msg->body . "'\n";
};

$channel->basic_consume('my_queue', '', false, true, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();

RabbitMQ bietet Fehlertoleranz, Skalierbarkeit und Flexibilität bei der Gestaltung verteilter Systeme.