2016-03-31 3 views
0

Ich habe ein Szenario, in dem wir eine Anwendung haben, die Spring MVC und Spring Web-Socket verwendet. Ich möchte eine Methode in einem Controller schreiben, der auf Nachrichten wartet und diese Nachricht dann transformiert und an eine andere Warteschlange sendet, die der Benutzer auf der Clientseite abhört.Hören Sie eine Warteschlange in einem Controller Spring MVC und Spring Web-Socket

Die Seiten Client-Code sieht aus wie

var connect = function() { 
    var socket = new SockJS(webSocketUrl); 
    stompClient = Stomp.over(socket); 
    stompClient.connect({}, function(frame) { 

     console.log('Connected: ' + frame); 
     stompClient.subscribe("/user/queue/test", function(data){ 
      alert(data);    
    } 
    } 
    ); 

Ich bin nicht sicher, wie der Java-Code wie

@SubscribeMapping("/queue/cluwe.controller.sign") 
public void signMessagesAggregator() { 
    String blah = "test"; 
    simpMessageSendingOperations.convertAndSendToUser("userId", "/queue/test", blah); 
} 

Ich weiß, dass der Java-Teil ist falsch aussehen sollte, aber ich kann keine Dokumentation findet in feder-websockets, die einen stompClient besitzen wie dinge in java. Irgendwelche Ideen?

Antwort

0

Es wird so etwas wie das sein:

@Controller 
public class GreetingController { 

    @MessageMapping("/hello") 
    @SendTo("/topic/events") 
    //subscribed to /hello and sends Greeting to /topic/events 
    public Greeting greeting(HelloMessage message) throws Exception { 
     Thread.sleep(3000); // simulated delay 
     return new Greeting("Hello, " + message.getName() + "!"); 
    } 

} 

Die Anwendung sollte mit @EnableWebSocketMessageBroker und Broker müssen so konfiguriert werden, konfiguriert werden. Werfen Sie einen Blick auf eine tutorial

0

Konfiguration

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 

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

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

Senden einer Nachricht

@Autowired 
SimpMessagingTemplate template; 
//all users 
template.convertAndSend("/topic/mytopic/", "message") 
//especific user 
template.convertAndSendToUser("userId", "/topic/mytopic/", "message")); 

Client-Seite

stomp.connect('/websocket', {}) 
    .then(function() { 
     stomp.subscribe('/topic/mytopic/', function(message) { 
     console.log('message' + message) 
     }); 
    });