Мне нужно отреагировать на абонентскую подписку.
Пример:
Пользователь подписывается на /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.
Я не могу себе представить, что это невозможно. Что я пропустил/сделал неправильно?
Спасибо :)