Прослушивание очереди в контроллере Spring MVC и веб-сокете Spring

У меня есть сценарий, в котором у нас есть приложение, использующее Spring MVC и веб-сокет Spring. Я хочу написать метод в контроллере, который прослушивает сообщения, а затем, как только он получит это сообщение, он преобразует его и отправит в другую очередь, которую пользователь прослушивает на стороне клиента.

Код на стороне клиента выглядит так:

    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);               
    }
    }
    );

Я не уверен, как должен выглядеть java-код

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

Я знаю, что часть java неверна, но я не могу найти какую-либо документацию в spring-websockets, у которой есть что-то вроде StompClient.subscribe в java. Любые идеи?


person Nikhil Das Nomula    schedule 31.03.2016    source источник


Ответы (2)


Будет примерно так:

@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() + "!");
    }

}

Приложение должно быть настроено с помощью @EnableWebSocketMessageBroker, а брокер должен быть настроен. Ознакомьтесь с руководством

person Dennis R    schedule 31.03.2016

Конфигурация

@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();
    }
}

Отправка сообщения

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

сторона клиента

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