使用@UserDestination将消息发送到websocket stomp端点

时间:2016-03-28 21:12:15

标签: endpoint stomp spring-websocket

我按照示例https://spring.io/guides/gs/messaging-stomp-websocket/

@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("/hello").withSockJS();
}

}

我正在尝试添加动态端点ex:/ hello / user1,/ hello / user2。

想了解一下如何实现这个目标吗?

到目前为止,在我看到的示例中,端点是静态的。

我希望有选择地隔离端点。

1 个答案:

答案 0 :(得分:0)

我读到了@UserDestination

并将我的@MessageMapping方法更改为

@MessageMapping("/getfeeds")
public void subscribeToFeeds(Principal principal) throws Exception {
    String reply = "hello " + principal.getName();
    System.out.println("sending " + reply);
    simpMessagingTemplate.convertAndSendToUser(principal.getName(), "/queue/getfeeds", reply);
}

在我的javascript中, 我正在做以下事情:

function connect() {
       var socket = new SockJS('/getfeeds');
        stompClient = Stomp.over(socket); 
        stompClient.connect('', '', function(frame1) {
            setConnected(true);
            console.log('Connected: ' + frame1);               
                // connect callback
                // subscribe to 
                stompClient.subscribe('/user/getfeeds', function(name) {
                    var msg = JSON.parse(name.body);
                    showGreeting(name);
                });
        });
    }

我也叫stompClient.send(" / app / getfeeds");

我不清楚如何使用用户目的地在客户端订阅。任何评论或示例将不胜感激。感谢