2016-05-24 6 views
1

に起こっているとき、私はストンプクライアントはSessionSubscribeEventが

@Service 
public class UserSubscribeEventListenerService { 

    private SimpMessagingTemplate template; 
    @Autowired 
    private GenericService<User> userService; 

    @Autowired 
    public UserSubscribeEventListenerService(SimpMessagingTemplate template) { 
     this.template = template; 
    } 

    @EventListener 
    public void handleSubscribeEvent(SessionSubscribeEvent event) { 
     try { 
      String subscribedUser = event.getUser().getName(); 
      System.out.println("User is " + event.getUser().getName() + " Message is " + "GREETINGS"); 
      Thread.sleep(3000); 
      System.out.println("AFTER 3 seconds...."); 
      template.convertAndSendToUser(subscribedUser, "/user/"+subscribedUser+ "/notify", userService.getByEmail(subscribedUser)); 
     } catch (MessagingException e) { 
      System.out.println(e.getCause() 
        + "\n\n" 
        + e.getCause()); 
      return; 
     } catch (InterruptedException e) { 
      System.out.println(e.getCause() 
        + "\n\n" 
        + e.getCause()); 
      return; 
     } 
    }  
} 

としてリスナーをサブスクライブしたメッセージ/通知を取得していないが、ストンプのためのJS関数の集まりですが、

<script type="text/javascript">  
    //Create stomp client over sockJS protocol 
    var socket = new SockJS("/ws"); 
    ///var socket = new SockJS("/ws"); 
    var stompClient = Stomp.over(socket); 
    $(document).ready(function() { 
     stompClient.connect({}, function(s) {  

       stompClient.subscribe('/user/' + s.headers['user-name'] + '/notify', function(frame){ 
        var messages = JSON.parse(frame.body) 

         var i; 
         var count = 0; 
         for(i in messages) { 
          var message = messages[i]; 
          count ++; 
          if(count <= 5){ 
           $('#user_message_addon').append(
           $('<li>').append(          
             $('<span></span>').html(message.notificationMessage) 
            ), 
            $('</li>')  
           ) 
          ); 
          } 
         }        
       });    

      }); 
     }); 
    </script> 

の下に与えられたクライアント側がありますUserSubscribeEventListenerServiceイベントが発生したときにクライアント側でコンソール出力が表示されている

Image showing console output

メッセージや通知を受け取ることができません。

問題の解決方法を教えてください。私は春の変更は、ユーザー名に応じた名前自体をキュー考える

template.convertAndSendToUser(subscribedUser, "/notify", userService.getByEmail(subscribedUser)); 

または

template.convertAndSendToUser(subscribedUser, "/user/notify", userService.getByEmail(subscribedUser)); 

答えて

1

あなたはにconvertAndSendToUserの引数を変更してみてくださいました。 それとも、convertAndSend方法でそれを行うことができます:(?あなたは、あなたの質問にそれを含めることができます)それはあなたのWebSocketの構成によって異なり

template.convertAndSend("/"+subscribedUser+"/notify", userService.getByEmail(subscribedUser)); 

または

template.convertAndSend("/user/"+subscribedUser+"/notify", userService.getByEmail(subscribedUser)); 

+0

最初の提案はうまく働いた、他うまくいくかもしれませんが、もう一度感謝しました。 –

+0

私は質問をしたいと思う、私はあなたが気にしないと思う、質問は_どのように私はユーザーのリストからユーザーを取得し、彼にメッセージを送ることができます 'stompClient.send(" here-how-to-set-destination-destination " }、 "Hi to selected user"); '_?あなたは答えることができます(ネット上のソースを参照してください)。 –

+0

私はあなたのユースケースを知らないときは答えにくいです。 1つのアイデアは、あなたのモデルを介してuserName(ユーザーのリスト)を渡して、jsコードで表示して使用することです。しかし、より詳細な情報が役に立つでしょう。 –