ユーザー宛先サブスクリプションに対応する必要があります。
例:
ユーザーは/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を使用。
これが不可能だとは想像できません。私は何を見逃した/間違ったことをしましたか?
ありがとうございました:)