Die Kommunikation zwischen PHP und Java mit ActiveMQ / Stomp
-
28-09-2019 - |
Frage
Hintergrund
Ich habe zwei Dienste, die miteinander über eine Nachrichtenwarteschlange kommunizieren müssen. Eines ist ein Vermächtnis Dienst geschrieben in PHP und der andere ist in Java. Früher als später, wird der PHP-Dienst in Java neu geschrieben werden. Die aktuelle Art, wie sie miteinander kommunizieren, ist zu einer gemeinsamen Datenbank, die die andere Service Umfragen zu schreiben. Das ist, was ich versuche von wegzukommen und ersetzen mit einer Nachrichten-Warteschlange.
Problem
Die Kommunikation arbeite ich auf der rechten Seite ist jetzt von der PHP-Dienst auf dem Java-Service. Es braucht ein relativ komplexes Objekt (Strings und und ganze Zahlen und Listen und Karten von Strings und ganzen Zahlen) zu senden. Idealerweise würde die Lösung in PHP und ideal in Java bearbeitbar sein, als dass das Erbe dieses Projektes sein wird.
Mögliche Lösungen
-
1.
Lösung
Die Lösung, die ich habe kommen mit ist Nachrichten von PHP / Stomp einzureihen die jms-json-object
Transformation. Die Nachrichten werden speziell JSON gefertigt, so dass, wenn sie in Java unter Verwendung von readObject
aus der Warteschlange entfernt werden, können sie zu einem vollständigen Objekt rekonstruiert werden unter Verwendung von XStream . Diese Rekonstruktion geschieht intern ActiveMQ und ich muss nur dafür sorgen, dass die notwendige Aliase und Wandler vorhanden sind. Als wir endlich die PHP-Komponente mit Java ersetzen, wird eine Nachricht zu senden writeObject
nur eine Frage der Verwendung.
Andere Tipps
Es gibt ein STOMP-Client für PHP,
Aus meiner Sicht sollten Sie Komponente Interaktionen von spezifischen Implementierungen frei halten. ActiveMQ ist Buggy und viele Systeme entfernt es für RabbitMQ oder Sun OpenMQ. Sie haben Codierung „Nachricht senden“ Routinen in PHP zu vermeiden, erstellen Sie „Sendmessage“ Servlet statt, und die Verwendung curl JSON-codierte Nachricht zu schreiben. Das Servlet wird dann Anschluss Fabrik usw. Mit einem wenig verwendet Overhead werden Sie PHP-Komponente von jedem mq-Server-spezifischen Code befreien. Sie können Textmessage mit JSON'ed Last verwenden, codieren, und es leicht mit Jackson Decodierung.