У меня такая проблема. Когда я пытаюсь отправить сообщение со стороны клиента на сервер, оно не соответствует моим методам @ MessageMapping . Я не знаю, как перехватывать сообщения на уровне контроллера.
Клиентская сторона отправляет сообщение (это реакция-топт, который использует sock js):
move = (move) => {
this.clientRef.sendMessage("/user/${this.state.opponentId}/queue/move", JSON.stringify(move))
};
На стороне сервера. WebSocketConfig:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/handler")
.setHandshakeHandler(new CustomHandshakeHandler())
.setAllowedOrigins("http://localhost:3000")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry brokerRegistry) {
brokerRegistry.setApplicationDestinationPrefixes("/app");
brokerRegistry.enableSimpleBroker("/topic", "/queue", "/user");
}
@EventListener
void handleSessionConnectedEvent(SessionConnectedEvent event) {
StompHeaderAccessor sha = StompHeaderAccessor.wrap(event.getMessage());
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.interceptors(new MyChannelInterceptor());
}
}
Я также добавил класс перехватчика для проверки пути входящего сообщения:
public class MyChannelInterceptor implements ChannelInterceptor {
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message);
return message;
}
}
При отладке MyChannelInterceptor я вижу сообщение с полезной нагрузкой и заголовками. Есть заголовок simpDestination с таким значением:
/user/baedde36-0f9e-4fa5-b8d7-687db1dbcd67/queue/move
Какое значение @MessageMapping я должен написать для обработки сообщений от указанных пользователей? Это сообщение успешно попадает на фронт по подписке на этот топи c, но не остается ни на одном контроллере:
`/user/${message}/queue/move`
Я просто хочу обрабатывать сообщения на стороне сервера, но не могу его там поймать.