2016-05-05 2 views
2

Ich verwende Web-Sockets mit Spring.Spring Web Socket - Benachrichtigen Sie den Client über den MQ-Listener

Hier ist mein Controller. Ein einfacher Controller, der ein Ergebnisobjekt akzeptiert und ein Ergebnisobjekt mit aufgefüllten Werten zurückgibt. Es würde eine Nachricht an die STOMP-Thema-Abonnenten "/ topic/update" veröffentlichen.

@Controller 
public class ReportController { 

    @MessageMapping("/charthandler") 
    @SendTo("/topic/update") 
    public Result pushMessage(Result r) throws Exception { 
     Thread.sleep(3000); // simulated delay 
     Result result = new Result(); 
     result.setTitle("ChartsPage"); 
     return result; 
    } 

} 

My Spring-Konfigurationsdatei:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/charthandler").withSockJS(); 
    } 

    @Bean 
    public WebSocketHandler chartHandler() { 
     return new ChartHandler(); 
    } 

    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableSimpleBroker("/topic"); 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

} 

Ich habe den folgenden Code in Javascript, die ein STOMP WebSocket-Client erstellt. Es ist Abonnement des ‚/ Thema/update‘

var socket = new SockJS('/reportapplication/charthandler/'); 
stompClient = Stomp.over(socket); 
stompClient.connect({}, function(frame) { 
    console.log('Connected: ' + frame); 
    stompClient.subscribe('/topic/update', function(result) { 
    console.log(JSON.parse(result.body).title); 
    }); 
}); 

Jetzt plane ich einen Listener (java und nicht in JavaScript) hinzuzufügen, die auf die Kaninchen MQ-Nachricht hören würde, ich will Objekt die Nachricht zu übergeben mein Controller und push alle die Nachricht an die Web-Socket-Clients.

Ich weiß nicht, wie ich alle meine Web-Socket-Clients benachrichtigen soll, wenn die Nachricht bei meinem MQ-Listener angekommen ist. Wie werde ich das tun?

Ist es eine gute Möglichkeit, eine Instanz des Berichts-Controllers zu erstellen und pushMessage aufzurufen, um alle meine Web-Socket-Clients zu benachrichtigen.

Auch ich bin mir nicht sicher, ob das funktioniert. Ich werde das versuchen. Ich möchte wissen, ob es einen besseren Ansatz gibt.

Gibt es einen besseren Ansatz oder einen besseren Weg, dies zu tun?

Antwort

2

Vielleicht, wenn man sich die Antwort Artem Bilan auf die folgende Frage zur Verfügung gestellt hat: Spring, how to broadcast message to connected clients using websockets?

Also, wenn Ihr Java Zuhörer auf die Nachricht Kaninchen MQ in einem Dienst ist, dann können Sie die folgenden in den gleichen Dienst tun und Rufen Sie den sendTo-gekennzeichneten WS-Benachrichtigungsendpunkt auf und leiten Sie die erwartete Nachricht an die WS-Clients weiter, die überwacht werden.

@Autowired 
private SimpMessagingTemplate brokerMessagingTemplate; 
....... 
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo"); 
Verwandte Themen