Проблема с принятием на сообщением на WebSocket
Пытаюсь сделать чат на Spring между 2 пользователями, но сообщения отправляются, но не приходят:
var socket = new SockJS('/chat');
var stompClient = Stomp.over(socket);
var currentUserId = document.getElementById("currentUserId").value;
var receiverId = document.getElementById("receiverId").value;
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
var receiverId = document.getElementById("receiverId").value; // Получаем receiverId
stompClient.subscribe('/user/' + receiverId + '/queue/reply', function(messageOutput) {
var message = JSON.parse(messageOutput.body);
var chatDiv = document.getElementById("chat");
var newMessage = document.createElement("div");
newMessage.innerHTML = "<strong>" + message.sender + ": </strong>" + message.content;
chatDiv.appendChild(newMessage);
});
});
function sendMessage() {
var messageContent = document.getElementById("message").value;
var message = {
sender: currentUserId,
receiver: receiverId,
content: messageContent
};
stompClient.send("/app/sendMessage", {}, JSON.stringify(message));
document.getElementById("message").value = '';
}
Подписка успешно проходит и мне кажется ошибка где-то на стороне сервера, но не могу найти где. Конфиг:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic", "/queue", "/user");
registry.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").withSockJS();
}
}
Контроллер
@MessageMapping("/sendMessage")
@SendTo("/queue/reply") // Сообщение будет отправлено только получателю
public Message sendMessage(@Payload Message message) {
return message;
}
Ответы (1 шт):
Автор решения: Lipe
→ Ссылка
Решил проблему, изменил контроллер:
@MessageMapping("/sendMessage")
public void sendMessage(@Payload Message message) {
messagingTemplate.convertAndSend("/user/" + message.getReceiver() + "/queue/reply", message);
}