Aufgabenwarteschlangen für PHP: RabbitMQ, Beanstalkd und Gearman

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Aufgabenwarteschlangen für PHP: RabbitMQ, Beanstalkd und Gearman



In modernen Webanwendungen besteht häufig die Notwendigkeit, langwierige oder ressourcenintensive Operationen asynchron auszuführen, ohne den Benutzer auf eine Antwort warten zu lassen. Typische Beispiele: Versand von E-Mail-Newslettern, Berichtserstellung, Bildverarbeitung, Interaktion mit externen APIs. Zur Lösung dieser Aufgaben werden in PHP Aufgabenwarteschlangen (Job Queues) verwendet. Sie ermöglichen es, die Anfragelogik von der Hintergrundverarbeitung zu trennen, wodurch die Reaktionsfähigkeit der Benutzeroberfläche und die Skalierbarkeit des Systems verbessert werden.



In diesem Artikel betrachten wir drei beliebte Werkzeuge zur Organisation von Warteschlangen in PHP im Detail: RabbitMQ, Beanstalkd und Gearman. Sie erfahren mehr über ihre Besonderheiten, Architektur, Anwendungsbeispiele und lernen, die passende Lösung für Ihr Projekt auszuwählen.



1. RabbitMQ



RabbitMQ ist ein leistungsstarker Nachrichtenbroker, der das AMQP-Protokoll (Advanced Message Queuing Protocol) implementiert. Es unterstützt komplexe Routing-Szenarien, Exchanges, priorisierte Warteschlangen, Bestätigungen der Zustellung und vieles mehr. RabbitMQ eignet sich ideal für Microservice-Architekturen und Systeme, die eine zuverlässige Nachrichtenzustellung erfordern.



Installation und Einbindung

Für die Arbeit mit RabbitMQ in PHP wird die Bibliothek php-amqplib verwendet. Installation über Composer:

composer require php-amqplib/php-amqplib


Beispiel: Senden einer E-Mail-Benachrichtigung

Wir erstellen einen Producer (Sender) und einen Consumer (Verarbeiter) für den Hintergrundversand von E-Mails.



Datei producer.php:

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

$data = json_encode([ 'email' => 'user@example.com', 'subject' => 'Willkommen!', 'body' => 'Vielen Dank für Ihre Registrierung.']);

$msg = new AMQPMessage($data, [ 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');

echo " [x] Nachricht gesendet";

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


Datei consumer.php:

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

echo " [*] Warte auf Nachrichten. Drücken Sie STRG+C zum Beenden";

$callback = function ($msg) { $data = json_decode($msg->body, true); // Simulation des E-Mail-Versands sleep(2); echo " [x] E-Mail an {$data['email']} gesendet"; $msg->ack();};

$channel->basic_qos(null, 1, null);$channel->basic_consume('email_queue', '', false, false, false, false, $callback);

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

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


2. Beanstalkd



Beanstalkd ist ein leichtgewichtiger, schneller und einfach zu bedienender Warteschlangen-Manager. Es arbeitet mit einem Protokoll, das memcached ähnelt, und eignet sich hervorragend für Aufgaben, die kein komplexes Routing erfordern. Beanstalkd unterstützt Prioritäten, Verzögerungen (Delay) und Time-to-Run (TTR).



Installation

Für PHP gibt es den Client pda/pheanstalk:

composer require pda/pheanstalk


Beispiel: Bildverarbeitung

Angenommen, wir müssen Miniaturansichten für hochgeladene Bilder erstellen.



Datei producer.php:

<?phprequire_once 'v                    

Empfehlungen