Spring WebSocket ConvertAndSendToUser не работает, но работает convertAndSend - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в семантике веб-сокета загрузки Spring и обмена сообщениями. В настоящее время я могу отправлять личные сообщения, используя приведенный ниже код.

String queueName = "/user/" + username  + "/queue/wishes";
simpMessagingTemplate.convertAndSend(queueName, message);

При попытке использовать convertAndSendToUser я не получаю никаких ошибок, но сообщение не отправляется. Я знал, что с помощью sendToUser должно быть небольшое изменение в том, как должно формироваться имя назначения, но я не понимаю это правильно.

String queueName = "/user/queue/wishes";
        simpMessagingTemplate.convertAndSendToUser(username, queueName, message);

Ниже мой код подписки.

 stompClient.subscribe('/user/queue/wishes', function(message) {
            alert(message);
        }) 

Ответы [ 3 ]

0 голосов
/ 23 июня 2020

У меня была аналогичная проблема, если ваш username на самом деле sessionId, попробуйте использовать один из перегруженных методов, принимающих заголовки (так сказано в SimpMessageSendingOperations javado c):

SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(username);
headerAccessor.setLeaveMutable(true);

messagingTemplate.convertAndSendToUser(username, "/queue/wishes", message, headerAccessor.getMessageHeaders());

мой пример

0 голосов
/ 23 июня 2020

Наконец-то разобрался с проблемой. Я сделал глупую ошибку. Я заполнял User DestinationPrefix как часть конфигурации WebSocket. но не настроил его для внедренного шаблона bean-компонента SimpMessaging.

0 голосов
/ 20 июня 2020

Он не отправляется, потому что ваш "пункт назначения", то есть "имя очереди", неверен. Как вы можете видеть здесь SimpMessagingTemplate.java # L230 , это метод, который вызывается как часть цепочки при вызовах template.convertAndSendToUser().

Этот метод уже добавляет префиксы /user к конечному пункту назначения. Поэтому вместо этого вы должны сделать что-то вроде этого: simpMessagingTemplate.convertAndSendToUser(username,"/queue/wishes", message); Теперь с правильным адресатом он должен быть отправлен пользователю.

...