Ben*_*n M 1 spring stomp spring-mvc spring-messaging spring-websocket
我正在尝试回复未经身份验证的用户使用@SendToUser.
我正在使用新创建的Spring Boot应用程序,我唯一的配置是:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
registry.setUserDestinationPrefix("/user");
}
}
Run Code Online (Sandbox Code Playgroud)
控制器代码:
@MessageMapping("/search")
@SendToUser("/search")
public String search(@Payload String xxx) {
return "TEST1234";
}
Run Code Online (Sandbox Code Playgroud)
JS:
var socket = new SockJS('/webapp/stomp');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/user/search', function(data){
alert(data.body);
});
});
Run Code Online (Sandbox Code Playgroud)
弹簧输出:
DEBUG org.springframework.web.servlet.DispatcherServlet: 996 - Successfully completed request
DEBUG o.s.w.s.handler.LoggingWebSocketHandlerDecorator: 45 - New WebSocketServerSockJsSession[id=shizav88]
DEBUG o.s.m.simp.broker.SimpleBrokerMessageHandler: 158 - Processing CONNECT session=shizav88
DEBUG o.s.m.simp.user.UserDestinationMessageHandler: 187 - Translated /user/search -> [/search-usershizav88]
Run Code Online (Sandbox Code Playgroud)
JS:
var name = document.getElementById('name').value;
stompClient.send("/app/search", {}, "test"));
Run Code Online (Sandbox Code Playgroud)
弹簧输出:
DEBUG o.s.m.s.a.s.SimpAnnotationMethodMessageHandler: 348 - Searching methods to handle SEND /app/search session=shizav88
DEBUG o.s.m.s.a.s.SimpAnnotationMethodMessageHandler: 446 - Invoking de.benneq.next.search.SearchController#search[1 args]
DEBUG o.s.b.factory.support.DefaultListableBeanFactory: 247 - Returning cached instance of singleton bean 'searchController'
DEBUG o.s.m.simp.user.UserDestinationMessageHandler: 187 - Translated /user/shizav88/search -> [/search-usershizav88]
Run Code Online (Sandbox Code Playgroud)
对我来说,它看起来像Spring映射订阅/search-usershizav88.然后用于/search-usershizav88发送响应.但我的JS客户端没有收到任何东西.
有什么问题?
现在我开始工作,但我真的不知道为什么:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue", "/topic"); // <- added "/queue"
registry.setApplicationDestinationPrefixes("/app");
registry.setUserDestinationPrefix("/user");
}
}
Run Code Online (Sandbox Code Playgroud)
@MessageMapping("/search")
@SendToUser // <- maps to "/user/queue/search"
public String search(@Payload String xxx) {
return "TEST1234";
}
Run Code Online (Sandbox Code Playgroud)
stompClient.subscribe('/user/queue/search', function(data){
alert(data.body);
});
Run Code Online (Sandbox Code Playgroud)
DEBUG org.springframework.web.servlet.DispatcherServlet: 996 - Successfully completed request
DEBUG o.s.w.s.handler.LoggingWebSocketHandlerDecorator: 45 - New WebSocketServerSockJsSession[id=fkbmnpkj]
DEBUG o.s.m.simp.broker.SimpleBrokerMessageHandler: 158 - Processing CONNECT session=fkbmnpkj
DEBUG o.s.m.simp.user.UserDestinationMessageHandler: 187 - Translated /user/queue/search -> [/queue/search-userfkbmnpkj]
DEBUG o.s.m.simp.broker.SimpleBrokerMessageHandler: 175 - Processing SUBSCRIBE /queue/search-userfkbmnpkj id=sub-0 session=fkbmnpkj
Run Code Online (Sandbox Code Playgroud)
现在日志中还有一行,表示处理SUBSCRIBE/queue/search-userfkbmnpkj id = sub-0 session = fkbmnpkj
之前失踪了.
如果有人可以解释为什么我需要/queue映射才能正常工作,那仍然会很好.
| 归档时间: |
|
| 查看次数: |
6321 次 |
| 最近记录: |