我需要对用户的目标订阅进行反应。
示例:
一个用户订阅了/user/messages
,因为他想接收所有进入的消息。现在我想查找任何在他离线期间创建的面向该用户的消息,并将它们发送给该用户。
可用代码:
客户端代码:
stompClient.subscribe('/user/messages', function(msg){
alert(msg.body);
});
服务器代码:
template.convertAndSendToUser(p.getName(), "/messages", "message content");
我需要什么:
似乎无法在服务器端捕获用户的目的地订阅,即:
@SubscribeMapping("/user/messages")
public void test(Principal p) {
sendMessagesThatWereReceivedWhileUserWasOffline();
}
我尝试了什么:
@SubscribeMapping("/messages")
public void test(Principal p) { ... }
如果客户端订阅了/app/messages
,它将有效,但不会为/user/messages
调用。
我的配置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/stomp").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/queue", "/topic");
registry.setUserDestinationPrefix("/user");
}
@Override
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
return true;
}
// all other methods left empty
}
使用Spring 4.1。
我无法想象这是不可能的。我错过了什么/做错了什么?
谢谢:)