15

ユーザー宛先サブスクリプションに対応する必要があります。

例:

ユーザーは/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を使用。


これが不可能だとは想像できません。私は何を見逃した/間違ったことをしましたか?

ありがとうございました:)

4

1 に答える 1

16

ユーザー プレフィックスをアプリケーション プレフィックスとしても定義すると、コントローラーでサブスクリプションをマップできるようになります。構成:

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.setApplicationDestinationPrefixes("/app", "/user");
    registry.enableSimpleBroker("/queue", "/topic");
    registry.setUserDestinationPrefix("/user");
}

コントローラ:

@SubscribeMapping("/messages")
public void test(Principal p) { 
    sendMessagesThatWereReceivedWhileUserWasOffline();
}
于 2014-09-19T10:49:10.383 に答える