2016-05-24 9 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

, но я не могу получить сообщение/уведомления.

Может ли любой орган рассказать мне, как решить эту проблему?

ответ

1

ли попытаться изменить convertAndSendToUser аргументов:

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

или

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

Я думаю, что изменения пружинной очередь самого названия в зависимости от имени пользователя. Или вы можете сделать это с convertAndSend способом:

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

или

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

Это зависит от конфигурации WebSocket (? Не могли бы вы включить его в вашем вопросе)

+0

Первое предложение работало хорошо, другие может работать, но не пробовал, спасибо снова. –

+0

Я хочу задать вопрос, я думаю, вы не возражаете, вопрос заключается в том, что я могу получить пользователя из списка пользователей и отправить ему сообщение 'stompClient.send (« here-how-to-set-destination », { }, «Привет для выбранного пользователя»); '_? Можете ли вы ответить (укажите источник в сети), пожалуйста. –

+0

Трудно ответить, когда я не знаю вашего дела. Одна из идей заключалась бы в том, чтобы передать имя пользователя (список пользователей) через вашу модель для просмотра и использования ее в вашем js-коде. Но более подробная информация была бы полезна. –

 Смежные вопросы

  • Нет связанных вопросов^_^