В качестве этой очереди я хочу отправить конкретному пользователю его sessionID.
И я пробую решение ответа , но клиентская сторона все еще не получает сообщение.
Это мои настройки.
Я сохраняю sessionID пользователя, когда он подключается к серверу
@EventListener
private void handleSessionConnected(SessionConnectEvent event) {
SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.wrap(event.getMessage());
String username = headers.getNativeHeader("login").get(0);
String sessionId = headers.getSessionId();
User user = new User(username, sessionId);
participantRepository.add(user);
Success", headers.getMessageHeaders());
}
Обработчик широковещательных сообщений in Контроллер
@MessageMapping("/chat")
public void handleChat(ChatMessage message, SimpMessageHeaderAccessor headerAccessor) throws Exception{
logger.debug(">>>[CHAT MESSAGE]");
JsonParser parser = new JsonParser();
String jsonMessage = gson.toJson(message);
JsonObject jsonObMessage =
parser.parse(jsonMessage).getAsJsonObject().get("map").getAsJsonObject();
messagingTemplate.convertAndSend("/queue", message);
}
Обработчик личных сообщений in Контроллер
@MessageMapping("/chat.{user}")
public void handlePrivateChat(@Payload ChatMessage message, SimpMessageHeaderAccessor headerAccessor) throws Exception{
logger.debug(">>>[PRIVATE CHAT MESSAGE]");
JsonParser parser = new JsonParser();
SimpMessageHeaderAccessor responseAccessor = SimpMessageHeaderAccessor
.create(SimpMessageType.MESSAGE);
String jsonMessage = gson.toJson(message);
JsonObject jsonObMessage =
parser.parse(jsonMessage).getAsJsonObject().get("map").getAsJsonObject();
User toUser = activeUsers.getByName(jsonObMessage.get("to").getAsString());
String destinateSessionID = toUser.getSessionID();
responseAccessor.setSessionId(destinateSessionID);
responseAccessor.setLeaveMutable(true);
MessageHeaders responseMessageHeader = responseAccessor.getMessageHeaders();
if(toUser != null){
messagingTemplate.convertAndSendToUser(destinateSessionID, "/queue", message, responseMessageHeader);
}
}
Оба обработчика сообщений могли получить сообщение, но клиент мог получить только широковещательное сообщение.
Все еще не мог найти ответ. Надеюсь, кто-нибудь может мне помочь. Thx.
Обновление
В моем WebSocketConfig
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue", "/topic");
registry.setApplicationDestinationPrefixes("/app");
}