Die Frühlings -Websocket -Nachricht übergibt nicht an @MessAgemappings auf Stomp Connection
Posted: 14 Sep 2025, 11:11
Ich verwende Spring Boot mit Stomp Over WebSocket. Die Stomp-Verbindung wird nicht erfolgreich festgelegt, und Nachrichten, die vom Client gesendet werden
Client mit WebSocket King-Client:
WebSocket-Konfiguration:
Benutzerdefinierte Interceptor und Handshake-Handler sind Registrierungsbenutzer ohne harte Sicherheitslogik und tun genau, wie sie benannt sind.
Code: Select all
@Controller
@Slf4j
@MessageMapping("/api/v1")
public class LeaderboardController {
private final ScoreServiceImpl scoreServiceImpl;
private final SimpMessagingTemplate simpMessagingTemplate;
LeaderboardController(ScoreServiceImpl scoreServiceImpl, SimpMessagingTemplate simpMessagingTemplate) {
this.scoreServiceImpl = scoreServiceImpl;
this.simpMessagingTemplate = simpMessagingTemplate;
}
@MessageMapping("/leaderboard/{lb}")
public void changes(@Payload Message request, @DestinationVariable String lb, Principal principal){
log.info("Saving scores for {}", request);
ScoreResponse scoreResponse = scoreServiceImpl.saveScore(request.getPayload(), lb);
simpMessagingTemplate.convertAndSend("/topic/leaderboard/" + lb, scoreResponse);
simpMessagingTemplate.convertAndSendToUser(principal.getName(), "/queue/my-score/" + lb, scoreResponse);
log.info("pushed messages for {}", request);
}
}
Code: Select all
CONNECT
accept-version:1.2
host:localhost
^@
SUBSCRIBE
id:sub-0
destination:/topic/update/racers
^@
SEND
destination:/api/v1/leaderboard/racers
content-type:application/json
{"name":"alex","score":42} ^@
Code: Select all
@Slf4j
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/api/v1");
registry.enableSimpleBroker("/topic", "/queue");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/web-socket/connect")
.addInterceptors(new CustomHandshakeInterceptorFromQuery())
.setHandshakeHandler(new CustomUsernameFromQueryHandshakeHandler())
.setAllowedOriginPatterns("*")
// .withSockJS()
;
}
@Bean
public SimpMessagingTemplate simpMessagingTemplate(MessageChannel clientOutboundChannel){
return new SimpMessagingTemplate(clientOutboundChannel);
}
}
Code: Select all
[MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]