给定一个 Websocket 配置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/queue", "/topic");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/add").withSockJS();
}
}
以及客户端JavaScript:
<script type="text/javascript">
console.log('begin javascript');
var stompClient = null;
function connect() {
var socket = new SockJS('/myapp/add');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected to STOMP: ' + frame);
stompClient.subscribe('/user/topic/abc', function(calResult) {
console.log('*** Got it ***');
});
});
}
connect();
</script>
并从服务器发送此消息:
messagingTemplate.convertAndSendToUser(username, "/topic/abc", "hello");
回调函数从未被触发。
JavaScript控制台显示连接已建立:
Connected to STOMP: CONNECTED user-name:jschmoe heart-beat:0,0 version:1.1 SUBSCRIBE id:sub-0 destination:/user/topic/abc
而Tomcat控制台则显示:
Processing SUBSCRIBE destination=/topic/abc-useryl3ovhr2 subscriptionId=sub-0 session=yl3ovhr2 user=jschmoe payload=byte[0]
随后当消息被发送时:
Processing MESSAGE destination=/topic/abc-useryl3ovhr2 session=null payload=hello
似乎一切都正常,只有回调未响应。