Schlange stehen

Ein Überblick zu Message Queues für PHP
Kommentare

dropr
Ein relativ junges Projekt ist dropr, die erste reine und freie Implementierung einer PHP Message Queue. Daher ist es kaum verwunderlich, dass dieses System von PHP aus deutlich einfacher ansprechbar

dropr

Ein relativ junges Projekt ist dropr, die erste reine und freie Implementierung einer PHP Message Queue. Daher ist es kaum verwunderlich, dass dieses System von PHP aus deutlich einfacher ansprechbar ist, als die bisher vorgestellten Lösungen. Die Installation gestaltet sich auf einem Unix-System relativ einfach. Sie beschränkt sich auf den Aufruf eines Skripts und der Dienst lässt sich direkt über die Kommandozeile starten. Auch das Erzeugen von Warteschlangen ist schnell erledigt, es genügt das Anlegen eines Verzeichnisses mit den entsprechenden Benutzerrechten.

dropr besitzt sowohl auf der Client- als auch auf der Serverseite einen Nachrichtenspeicher. Sendet der Client eine Nachricht zum Server, werden diese zuerst im lokalen Speicher abgelegt und anschließend automatisch an den Server gesendet. Hierdurch wird erreicht, dass selbst beim Ausfall der Verbindung zwischen Client und Server keine Nachrichten verloren gehen und die Verarbeitung automatisch weiter stattfinden kann, sobald die Verbindung wieder möglich ist. Abbildung 1 zeigt den Ablauf eines solchen Datentransports zwischen Client und Server.

Abb. 1: Ablauf des Datentransports mit dropr

Zum Schreiben einer Nachricht genügt daher nicht allein die Angabe des Servers, auch der lokale Speicher muss mit angegeben werden. Listing 6 zeigt das Schreiben einer Nachricht in eine dropr Queue.

Listing 6: Schreiben einer Nachricht in eine dropr Queue
createMessage('Testnachricht', $peer, 'myChannel');
$msg->queue();
?>

Beim Schreiben wird neben der Queue auch noch ein Channel-Name angegeben, mit dem sich Nachrichten kategorisieren lassen. Das Auslesen einer Queue auf dem Server ist ebenso einfach und kann selektiv anhand der verwendeten Kategorie erfolgen. Listing 7 zeigt ein Beispiel hierfür.

Listing 7: Auslesen von Nachrichten aus einer Queue
getMessages('myChannel') as $msg) {
  echo $msg->getId().':'.$msg.' ';
  
  // Nachricht löschen
  $storage->setProcessed($msg);
}
?>

Schöner Artikel?

Hat Ihnen der Artikel gefallen? Dies und mehr ist alles Teil der Ausgabe 2.09 unseres PHP Magazins. Alle zwei Monate frisch am Kiosk! Zur jeweils aktuellen Ausgabe geht es hier.

Als Übertragungsprotokoll kommt HTTP zum Einsatz. Dropr setzt hier auf CURL, die Installation der entsprechenden PHP-Erweiterung ist demnach Grundvoraussetzung für den Einsatz der Software. Neben der eigentlichen Implementierung der Warteschlange liefert die aktuelle Version der Software auch noch Befehle zur Wartung der Queues, mit denen über die Kommandozeile beispielsweise die Anzahl der Nachrichten in einer Queue bestimmt werden können.

Dropr wird nach Aussagen der Entwickler schon seit längerer Zeit für den Jimdo-Webdienst eingesetzt und läuft dort stabil in einer Hochlastproduktivumgebung. Je nach Server schafft eine Standardinstallation von dropr erfahrungsgemäß zwischen 100 und 200 Messages pro Sekunde, was für viele Anwendungen mehr als ausreichend sein dürfte. Durch die lokale persistente Zwischenspeicherung der Nachrichten entsteht ein ausfallsicheres System, bei dem keine Daten verloren gehen.

Fazit

Wer zwei PHP-Systeme oder Tasks per Message Queue voneinander koppeln möchte, der ist mit dropr sehr gut bedient. Die aktuell vorliegende Version ist schnell und robust und kann durchaus als Backend für Produktivsysteme dienen. Wer darauf angewiesen ist, heterogene Systeme miteinander zu verbinden, der sollte eher zu einer Lösung basierend auf JMS oder einer freien Middleware-Implementierung wie ActiveMQ zurückgreifen. Dann entsteht auf Seiten von PHP zwar einiges an Mehraufwand, dafür ist man aber in der Lage, verschiedene Technologien miteinander zu verknüpfen. Die Zend Job Queues eignen sich hervorragend, um Aufgaben zeitversetzt abzuarbeiten. Wer Windows als Serversystem einsetzt, für den wird die Luft derzeit schon ein wenig dünner. Viele der vorgestellten Lösungen funktionieren nur auf Unix-basierten Betriebsystemen. Übrig bleiben hier nur die Zend Platform und die Java-basierten Lösungen auf JMS und ActiveMQ.

src=“http://entwickler.com/develop/zonen/magazine/onlineartikel/pspic/picture_file/4/Autorenbil49f17881604e5.jpg“ hspace=“5″ vspace=“5″ alt=““>

Timo Haberkern ist Teamleiter bei der Firma ROTEX Heating Systems GmbH und dort unter anderem für die Entwicklung von webbasierter Enterprise-Software verantwortlich. Zudem schreibt er regelmäßig in wichtigen deutschen Fachmagazinen, ist Autor des ersten deutschen Symfony-Buchs und arbeitet als freiberuflicher Trainer für PHP, ExtJS, Flex und Symfony.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -