Spring Stomp Websockets回调函数未被调用

3

给定一个 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

似乎一切都正常,只有回调未响应。


你找到这个问题的解决方案了吗?我可能遇到了类似的问题,这会有所帮助。 - Bojan Trajkovski
它在Spring Boot应用程序中运行正常,但在另一个Spring MVC应用程序中却不行。在某个时候,我们将把第二个应用程序转换为Spring Boot。然而,我想确切地知道问题所在,因此我正在逐个消除不同的依赖关系。 - Paul Croarkin
1
看起来和我的问题很相似,我也有一个作为概念验证的Spring Boot应用程序,与SockJS JavaScript客户端配合良好。我还使用convertAndSend将此有问题的Spring后端与该JavaScript客户端进行了测试,并未收到消息,因此很可能是Spring的问题。如果您取得进展或找到解决方案,请更新此问题。 - Bojan Trajkovski
1
我认为可能是Tomcat版本的问题,因为MVC应用程序使用的是Tomcat 7,而Boot则捆绑了Tomcat 8,但现在我已经将MVC应用程序切换到运行在Tomcat 8上,它仍然无法正常工作。由于有很多依赖项,所以可能需要一段时间才能找出问题所在。 - Paul Croarkin
1个回答

0
在我的情况下,问题是由XML配置引起的,一旦我使用@EnableWebSocketMessageBroker注释切换到Java配置,我就能在客户端接收到消息了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接