Проект содержит WebSocketConfiguration с конечной точкой 'ws' и простым префиксом посредника '/ topic'.
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
{
registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry)
{
registry.setApplicationDestinationPrefixes("").
enableSimpleBroker("/topic");
}
Когда я вызываю метод post ('/ action') из бэкэнд-сервиса в угловом компоненте, сообщение конвертируется и отправляется по назначению '/topic/test'.
@PostMapping("/action/{id}")
public ResponseEntity<Information> action(HttpSession httpSession, @PathVariable(name = "id") String gameId,
@Valid @RequestParam("action") Action action) {
try
{
Information information = gameService.handle(httpSession.getId(),
UUID.fromString(gameId), action);
messagingTemplate.convertAndSend("/topic/test", "go");
return new ResponseEntity<>(information, HttpStatus.OK);
} catch (HttpClientErrorException e) {
return new ResponseEntity<>(e.getStatusCode());
}
}
В угловом компоненте результат websocket не обновляется, как если бы сообщение не отправлялось по назначению.Соединение в конструкторе компонента:
constructor(private route: ActivatedRoute, private gameService: GameService) {
this.route.params.subscribe(params => {
this.id = params['id'];
});
const socket = new SockJS(`http://192.168.0.16:8080/ws`);
let stomp = Stomp.over(socket);
stomp.connect('', function(frame) {
stomp.subscribe(`/topic/test`, res => {
console.log(res);
});
});
}
ОБНОВЛЕНИЕ : У меня есть решение.Я просто изменяю конечную точку на «сокет» с «ws», и это работает.Я не знаю почему.Почему это работает?Это очень забавная ситуация для меня, и я хочу знать, почему.