В журналах моего приложения я получил:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.socket.sockjs.SockJsException: Uncaught failure in SockJS request, uri=****; nested exception is org.springframework.web.socket.sockjs.SockJsMessageDeliveryException: Failed to deliver message(s)
Я пытался создать собственный обработчик:
@MessageExceptionHandler({SockJsMessageDeliveryException.class})
public void handle(SockJsMessageDeliveryException e) {
log.error("Handled websocket exception: " + e.getClass().getSimpleName());
}
, но это исключение не возникло. Я также попытался перезаписать SimpMessagingTemplate
public class SilentErrorSimpMessagingTemplate extends SimpMessagingTemplate {
private final SimpMessagingTemplate simpMessagingTemplate;
SilentErrorSimpMessagingTemplate(SimpMessagingTemplate simpMessagingTemplate) {
super(simpMessagingTemplate.getMessageChannel());
simpMessagingTemplate.setMessageConverter(new MappingJackson2MessageConverter());
this.simpMessagingTemplate = simpMessagingTemplate;
}
@Override
public void convertAndSendToUser(@NotNull String user, @NotNull String destination, @NotNull Object payload) throws MessagingException {
try {
simpMessagingTemplate.convertAndSendToUser(user, destination, payload);
} catch (SockJsMessageDeliveryException e) {
log.error("Socket send error: " + e.getClass().getSimpleName());
}
}
}
. Я хотел бы обработать эту ошибку, когда сеанс websocket был закрыт, чтобы не вызывать мои сигналы мониторинга. Есть идеи?