2016-03-04 49 views
7

Posso inviare un messaggio a un broker di messaggi utilizzando i metodi SimpMessagingTemplate#convertAndSendToUser o SimpMessagingTemplate#convertAndSend senza impostazioni su un broker di messaggi websocket utilizzando @EnableWebSocketMessageBroker?Utilizzare SimpMessagingTemplate senza creare un broker di messaggi socket Web Spring 4

Quello che sto cercando di fare è utilizzare un server websocket per fornire messaggistica per due istanze del server delle applicazioni (una primavera 4 e una primavera 3). Ho creato un unico server web con Spring 4, avvio primaverile e broker di messaggi websocket abilitato.

Ora voglio che due server di applicazioni invii messaggi a rabbitmq in modo che li trasmetta ai client a cui è iscritto.

Il primo problema che ho riscontrato è che se non è disponibile la configurazione del broker di messaggi Websockt, SimpMessagingTemplate non verrà avviato automaticamente al contesto dell'applicazione. Non sono riuscito a farlo iniettare senza creare nemmeno una bacheca websocket.

Per favore aiutami a scoprire se è possibile.

BTW Ho un previous question senza risposta relativa a questo.

+0

Penso che per inviare messaggi a un broker come rabbitmq, non si dovrebbe usare 'SimpMessagingTemplate' ma un' RabbitTemplate' –

+0

Sì, dovrebbe essere il caso generico. Dovremmo essere in grado di spingere direttamente alla coda di rabbitmq. In primavera Websocket quella parte è stata nascosta in alcuni punti. Impossibile capire quali sono i nomi delle code ecc. Quando il broker dei messaggi è configurato, fornisce un bean della classe 'SimpMessagingTemplate' e due metodi push al messenger dei messaggi. –

risposta

1

Bene, dopo aver letto molta documentazione ho trovato la risposta da solo. La cosa fondamentale è che questa architettura sta seguendo.

enter image description here

In questa architettura primavera agire come un gateway per la comunicazione tra il broker messaggio e cliente. Spring non fa nulla (tranne quando è necessario) ma inoltra la richiesta al broker dei messaggi (messaggi STOMP). La configurazione mantenuta su Spring definisce una coppia di cose importanti. Uno è lo scambio e altri erano chiavi di routing. La configurazione Spring ci fornisce un livello astratto, quindi iscriviamo e spingiamo i messaggi al broker dei messaggi senza problemi.

SimpMessagingTemplate è il livello astratto che usiamo per comunicare con il broker di messaggi. Spring crea il bean usando i dettagli forniti. Bene, non sono riuscito a creare manualmente un'istanza di SimpMessagingTemplate. Devo aggiornare l'applicazione Spring 3 alla Spring 4 per poter usare websockets.

Poiché Spring e il broker dei messaggi sono disaccoppiati, il clustering dell'istanza dell'applicazione non ha alcun effetto sul broker dei messaggi. Spring comunicherà al broker dei messaggi solo quando è necessario iscriversi a un canale o quando è necessario pubblicare un messaggio su un canale. Quindi, se ci sono due istanze che si iscrivono allo stesso canale, saranno due le code che vincolano lo scambio utilizzando la stessa chiave di routing. I messaggi pubblicati su un canale saranno disponibili per tutti gli abbonati (code) perché utilizzano tutti la stessa chiave di routing. Fare riferimento a rabbitmq stop plugin documentation per una descrizione più dettagliata.