Обработка ошибок при использовании простого брокера STOMP - PullRequest
0 голосов
/ 04 апреля 2019

Я создаю простой брокер STOMP, используя @EnableWebSocketMessageBroker. Когда RuntimeException происходит в методе @MessageMapping, я хотел бы получить кадр STOMP ERROR, но по умолчанию он не работает.

Кажется, что ERROR frame не поддерживается в простом брокере: https://github.com/spring-projects/spring-framework/blob/master/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageType.java#L28-L44

С другой стороны, существует механизм для отправки ERROR фреймов, уже доступных в spring-websocket, и его код ссылается на некоторые классы, которые относятся к простому брокеру: https://github.com/spring-projects/spring-framework/blob/master/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java#L349

Как включить механизм отправки ERROR кадров, когда RuntimeException происходит в методе @MessageMapping?

1 Ответ

0 голосов
/ 04 апреля 2019

Быстрый и простой способ сделать это состоит в том, чтобы на клиенте была подписана специальная подписка на обработчик ошибок, перед тем как делать какие-либо вызовы конечным точкам @MessageMapping. Затем оберните все вызовы метода на вашем сервере веб-сокетов блоком try catch и обработайте возникающие исключения. Тогда это простой случай сделать что-то вроде:

messagingTemplate.convertAndSend( "/topic/clientControl/1234", "SHUT_DOWN"); (or send to user etc, depends on your subscription model)

Вы можете либо отправить сообщение об ошибке клиенту и позволить ему обработать его, либо решить, что делать на стороне сервера, и иметь контрольную подписку, позволяющую серверу передавать команды клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...