@ Xmagic- Спасибо.
довалQuetion1 а такжеQuetion2 из переполнения стека для отправки сообщений конкретному клиенту на основе его sessionId, но не удалось найти успех.
Ниже мой пример класса RestController
@RestController
public class SpringSessionTestApi {
@Autowired
public SimpMessageSendingOperations messagingTemplate;
@MessageMapping("/messages")
public void greeting(HelloMessage message, SimpMessageHeaderAccessor headerAccessor) throws Exception {
String sessionId = (String) headerAccessor.getSessionAttributes().get("SPRING.SESSION.ID");
messagingTemplate.convertAndSendToUser(sessionId,"/queue/test",message, createHeaders(sessionId));
}
private MessageHeaders createHeaders(String sessionId) {
SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
headerAccessor.setSessionId(sessionId);
headerAccessor.setLeaveMutable(true);
return headerAccessor.getMessageHeaders();
}
}
Session Id: когда клиент отправляет запрос createSession, генерируется новый весенний sessionId, который также сохраняется в MongoDB. После этого, когда клиент отправляет запрос на подключение к веб-сокету, он получает тот же идентификатор сессии, который, как и ожидалось, был сохранен в mongoDb Пока это все работает нормально.
Теперь моя работа состоит в том, чтобы отправить ответ клиенту на основе sessionId. Для этого у меня есть ниже класс веб-сокета:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends
AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/messages");
}
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue");
registry.setApplicationDestinationPrefixes("/app");
}
}
и пример кода клиента, который я использую для подключения:
function connect() {
stompClient = Stomp.client('ws://localhost:8016/messages');
stompClient.debug = null;
stompClient.connect({}, function (frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/user/queue/test', function (greeting) {
console.log("Hello "+greeting);
console.log("Greeting body "+JSON.parse(greeting.body));
});
});
}
Пожалуйста, помогите, где я делаю не так в этом? Заранее спасибо!