Der einfachste Warteschlangenmodus von PHP RabbitMQ besteht aus einem Produzenten und einem Konsumenten, wie in der folgenden Architektur dargestellt.
Erklärung:
P steht für den Produzenten, C für den Konsumenten und rot für die Warteschlange.
Derzeit wird für die Verwendung von RabbitMQ mit PHP das offiziell empfohlene Paket php-amqplib verwendet.
1. Vorbereitung
Bitte lesen Sie zuerst die folgenden Abschnitte, um das relevante Wissen zu verstehen:
2. PHP-Abhängigkeiten installieren
Verwenden Sie Composer zur Installation:
composer require php-amqplib/php-amqplib
Hinweis: Die neueste Version von php-amqplib erfordert PHP 7.0 oder höher.
Importieren Sie das php-amqplib-Paket:
require_once __DIR__ . '/vendor/autoload.php';
3. Nachricht senden
3.1. Verbindung zu RabbitMQ herstellen
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
Erklärung der Parameter:
- new AMQPStreamConnection('RabbitMQ-Serveradresse', Portnummer, 'Benutzername', 'Passwort');
3.2. Kanal erstellen
$channel = $connection->channel();
Die meisten Operationen werden im Kanal durchgeführt.
3.3. Warteschlange deklarieren
$channel->queue_declare(
'tizi365_hello', // Warteschlangenname, muss eindeutig sein
false,
true, // Ob sie beständig ist
false,
false
);
3.4. Nachricht senden
// Definieren Sie ein Nachrichtenobjekt, wobei der Parameter den zu sendenden Nachrichteninhalt darstellt
$msg = new AMQPMessage('Hallo Welt!');
// Ob die Nachricht beständig ist
// $msg->set('delivery_mode', AMQPMessage::DELIVERY_MODE_PERSISTENT);
// Nachricht senden
$channel->basic_publish(
$msg, // Nachrichtenobjekt
'', // Tausch ignorieren
'tizi365_hello' // Routing-Parameter, hier den Warteschlangennamen als Routing-Parameter verwenden
);
3.5. Vollständiger PHP-Code zum Senden von Nachrichten
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
// Verbindung herstellen
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Kanal erstellen
$channel = $connection->channel();
// Warteschlange deklarieren
$channel->queue_declare('tizi365_hello', false, false, false, false);
// Nachrichtenobjekt definieren
$msg = new AMQPMessage('Hallo Welt!');
// Nachricht senden
$channel->basic_publish($msg, '', 'tizi365_hello');
echo " [x] Sent 'Hallo Welt!'\n";
$channel->close();
$connection->close();
Speichern in Datei: send.php
4. Nachrichtenverarbeitung
Die ersten drei Schritte zur Nachrichtenverarbeitung (Erstellen einer RabbitMQ-Verbindung, Erstellen eines Kanals, Deklarieren einer Warteschlange) sind identisch mit dem Versenden von Nachrichten und entsprechen den Abschnitten 3.1, 3.2 und 3.3, jeweils.
Der vollständige Code des Empfängers sieht wie folgt aus:
<?php require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
// Eine RabbitMQ-Verbindung herstellen
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// Einen Kanal erstellen
$channel = $connection->channel();
// Eine Warteschlange deklarieren
$channel->queue_declare('tizi365_hello', false, false, false, false);
echo " [*] Warten auf Nachrichten. Zum Beenden CTRL+C drücken\n";
// Die Funktion zur Nachrichtenverarbeitung definieren (hier wird eine anonyme Funktion verwendet)
$callback = function ($msg) {
// Logik zur Nachrichtenverarbeitung
echo ' [x] Empfangen: ', $msg->body, "\n";
};
// Einen Verbraucher erstellen
$channel->basic_consume(
'tizi365_hello', // Zu konsumierender Warteschlangenname
'', // Verbraucher-Tag, falls ignoriert, wird eine eindeutige ID generiert
false,
true, // Ob die Nachricht automatisch bestätigt werden soll, d.h. ob automatisch RabbitMQ mitgeteilt werden soll, dass die Nachricht erfolgreich verarbeitet wurde
false,
false,
$callback // Funktion zur Nachrichtenverarbeitung
);
// Solange der Kanal nicht geschlossen ist, den Prozess blockieren, um ein Beenden zu verhindern
while ($channel->is_open()) {
$channel->wait();
}
// Ressourcen freigeben
$channel->close();
$connection->close();
In Datei speichern: recv.php
5. Ausführen der Demo
Öffnen Sie zwei Shell-Fenster und führen Sie die beiden Skripte separat aus:
php recv.php
php send.php