Spring WebSocket在连接后不发送队列后缀

时间:2014-11-18 10:18:45

标签: stomp spring-websocket

我的服务器端配置在这里:

<websocket:message-broker application-destination-prefix="/chat">
        <websocket:stomp-endpoint path="/connect">
          <websocket:sockjs/>
        </websocket:stomp-endpoint>
        <websocket:simple-broker prefix="/broadcast/"/>
</websocket:message-broker>

客户端代码:

var stompClient = null;
var socket = new SockJS('/connect');
stompClient = Stomp.over(socket);
stompClient.connect('', '', function (frame) {
    console.log(frame); // Inside frame object queue-suffix not sended
    var suffix = frame.headers['queue-suffix'];
    stompClient.subscribe('/broadcast/message'+suffix, function(calResult){
      console.log(calResult);
    });
}, function (error) {
    console.log(error);
});

连接成功,但我无法在连接帧对象中找到队列后缀

2 个答案:

答案 0 :(得分:2)

我们确实在早期的里程碑中包含了这样的标题(我认为直到4.0 RC1),但“队列后缀”现在已完成封装在服务器端。请参阅上面的Nick示例以及文档Spring WebSocket is not send queue-suffix after connection

答案 1 :(得分:1)

我正在使用基于注释的配置和消息传递类。我也使用SpringBoot 1.2.0.RC1,它引入了Spring 4.1.2.RELEASE。

所以,鉴于我设置了我的websockets&amp; STOMP如下:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketProdConfig extends AbstractWebSocketMessageBrokerConfigurer {

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

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

然后我的控制器中的发送/接收方法的示例是

@Controller
public class InOutBoardController {
...
    @MessageMapping("/user-status-refresh")
    @SendToUser(value = "/queue/user-status-refresh", broadcast = false)
    public UserStatusUpdateMessage[] userStatusRefresh() {
        ...
    }
}

当我在客户端收到消息时,他们的主题是“/ user / njacobs5074 / queue / user-status-values”。

希望这有帮助。