2016-05-24 20 views
1

Ich habe ein abonnieren Zuhörer alsstampfen Client erhält keine Nachrichten/Benachrichtigungen, wenn SessionSubscribeEvent passiert ist

@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; 
     } 
    }  
} 

aber Client-Seite, die für stampfen gegebenen Bündel von JS-Funktionen sind unter

<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> 

ist scheint nicht richtig zu funktionieren, nicht zeigen oder sagen, keine Nachrichten von Server gesendet, wenn jemals UserSubscribeEventListenerService Ereignis ist aufgetreten Ich bekomme Konsolen-Ausgabe auf der Client-Seite als

Image showing console output

aber ich bin nicht in der Lage, Nachrichten/Benachrichtigungen zu bekommen.

Kann mir irgendein Körper sagen, wie ich dieses Problem lösen kann?

Antwort

1

Haben Sie versucht, convertAndSendToUser Argumente zu ändern:

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

oder

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

denke ich, Federwechsel Name Warteschlange sich je nach Benutzernamen. Oder man kann es mit convertAndSend Methode tun:

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

oder

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

Es auf Ihrer websocket Konfiguration hängt (? Könnten Sie es in Ihrer Frage enthalten)

+0

Erster Vorschlag gut gearbeitet, andere kann funktionieren, hat es aber nicht versucht, danke nochmal. –

+0

Ich möchte eine Frage stellen, ich denke, dass es Ihnen nichts ausmachen würde, Frage ist _wie kann ich Benutzer aus der Benutzerliste abrufen und ihm eine Nachricht senden 'stompClient.send (" here-how-to-set-destination ", { }, "Hallo zum ausgewählten Benutzer"); '_? Können Sie bitte antworten (verweisen Sie eine Quelle im Netz). –

+0

Schwer zu beantworten, wenn ich Ihren Anwendungsfall nicht kenne. Eine Idee wäre, userName (Liste der Benutzer) über Ihr Modell zu übergeben, um es in Ihrem js-Code anzuzeigen und zu verwenden. Aber mehr Details wären nützlich. –