Bei meinem früheren Arbeitgeber hatte ich die Gelegenheit Projekte mittels
SAP Exchange Infrastructure zu realisieren.
Bei dem Produkt handelt es sich um eine in Java und ABAP implementierte Message-orientierte Middleware, die es ermöglicht eingehende Nachrichten der verschiedensten Formate in andere Formate zu transformieren und an beliebige Empfänger zu verteilen, also ideal zun Datenaustausch in einer heterogenen Umgebung.
Da ich von den Möglichkeiten dieser Software ziemlich beeindruckt war, es jedoch nicht realistisch ist, sich so ein Teil zu lizensieren, schaute ich mich nach ähnlichen Lösungen um. Da gäbe es zum Beispiel
IBM WebSphere, welches für den privaten Gebrauch aber ebenso ausscheidet.
Message Queues
Bei reinen Message Queues sind
JMS und
Apache ActiveMQ als OpenSource Lösungen die verbreitetsten.
Die Suche nach in PHP implementierten Middlewares oder Message Queues war sehr ernüchternd. Zwar gibt es zu den oben genannten und anderen Lösungen oft Bibliotheken, um mit PHP darauf zugreifen zu können, den Aufwand diese Systeme aufsetzen zu müssen erspart dies aber nicht.
Die einzig brauchbare PHP Message Queue scheint
dropr zu sein, welche bereits bei
Jimdo im Produktiveinsatz verwendet wird um Nachrichten zwischen global verteilten Servern auszutauschen.
Wenn jemand weitere brauchbare Lösungen kennt, bitte einen Kommentar hinterlassen.
Das Rad neu erfinden
Als Entwickler reizt es mich jetzt natürlich selbst in PHP eine entsprechende Middleware zu entwickeln

Ob dies nun sinnvoll ist oder nicht, sei mal dahingestellt, von der technischen bzw archtitekturellen Seite ist es auf jeden Fall eine interessante Herausforderung.
Im Prinzip soll sich der Funktionsumfang an der SAP XI orientieren, wobei es wohl etwas vermessen wäre die Komplexität des Systems genau so abbilden zu können, von daher wird es eine ziemlich abgespeckte Variante werden.
Funktionalität
Ein ausgearbeitetes Konzept gibt es noch nicht, wird es vielleicht auch nie geben, da ich es iterativ angehen werde um nach und nach den Komplexitätsgrad zu erhöhen.
Einen groben Überblick der zu bedenkenden Komponenten gibt es im Wiki zum Google Code Projekt
peXi - PHP Exchange Infrastructure.
Im Groben soll das System später einmal folgendes können:
- Synchrone/Asynchrone Verarbeitung
- Unterstützung vieler Nachrichtenformate/Protokolle
- (Zwischen-/Persistente) Speicherung in Queues
- Senden an beliebige Empfänger
- Transformation von Nachrichten in Zielformat
- Erstellen von Szenarien
- Abbildung von Systemlandschaften
In dem Zusammenhang gilt es natürlich auch noch folgende Themen zu beachten:
- Skalierbare Architektur
- Performanceoptimierung
- Sicherheit / Authentifizierung / Zugriffskontrolle
- Monitoring
- Usability der Konfigurationsoberfläche
Das reicht dann auch erstmal
Entwicklung eines Prototyps
Als erstes gilt es einen simplen asynchronen Prototyp zu erstellen, der aus diesen Komponenten bestehen wird:
- Sender: Sendet HTTP Messages an Server
- Server: Empfängt Messages und speichert diese in einer Queue
- Engine: Daemon, der periodisch die Queue nach neuen Messages checkt um diese an Empfänger zu schicken
- Empfänger: Nimmt Messages entgegen und speichert diese im Filesystem
Ein erster rudimentärer Test funktionierte bereits. Nun gilt es die einzelnen Komponenten Stück für Stück zu isolieren und auzubauen und eine ordentliche Architektur zu entwickeln.
Hilfe und Ideen sind gerne willkommen
