Comunicare tra PHP e Java utilizzando ActiveMQ / Stomp
-
28-09-2019 - |
Domanda
Sfondo
Ho due servizi che hanno bisogno di comunicare tra loro su una coda di messaggi. Uno è un servizio legacy scritto in PHP e l'altro è in Java. Prima che poi, il servizio di PHP verrà riscritto in Java. Il modo corrente che comunicano tra di loro è quello di scrivere in un database condiviso, che gli altri sondaggi di servizio. Questo è quello che sto cercando di allontanarsi da e sostituirla con una coda di messaggi.
problema
La comunicazione su cui sto lavorando in questo momento è dal servizio PHP per il servizio di Java. Ha bisogno di inviare un oggetto relativamente complesso (stringhe e numeri interi e ed elenchi e mappe delle stringhe e numeri interi). Idealmente, la soluzione sarebbe praticabile in PHP e ideale in Java, come che sta per essere l'eredità di questo progetto.
possibili soluzioni
-
1.
Soluzione
La soluzione che mi è venuta in mente è quello di accodare i messaggi di PHP / Stomp usando la trasformazione jms-json-object
. I messaggi sono appositamente predisposto JSON in modo tale che quando sono levati dalla coda in Java utilizzando readObject
, possono essere ricostruiti a un oggetto completo utilizzando XStream . Questa ricostruzione accade interna alla ActiveMQ e devo solo fare in modo che la necessaria alias e convertitori sono in atto. Quando finalmente sostituire il componente PHP con Java, l'invio di un messaggio sarà solo una questione di usare writeObject
.
Altri suggerimenti
C'è un client STOMP per PHP,
A mio avviso si dovrebbe tenere le interazioni componente gratuito da implementazioni specifiche. ActiveMQ è bacato e molti sistemi rimosso in favore di RabbitMQ o Sun OpenMQ. Si deve evitare di codifica "trasmettono il messaggio" routine in PHP, creare "SendMessage" servlet, invece, e l'uso curl per inviare un messaggio JSON-codificato. Il servlet utilizzerà quindi factory di connessione, ecc Con un po 'in testa si libera componente PHP da un codice specifico di mq-server. È possibile utilizzare TextMessage con carico JSON'ed, codifica e decodifica facilmente con Jackson.