使用STOMP简单代理时的错误处理

时间:2019-04-04 15:03:58

标签: spring spring-websocket stomp spring-messaging

我正在使用@EnableWebSocketMessageBroker创建简单的STOMP代理。当RuntimeException方法中发生@MessageMapping时,我希望收到STOMP ERROR帧,但是默认情况下它不会像这样工作。

似乎简单经纪人不支持ERROR框架: 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 :(得分:0)

快速简便的方法是在对@MessageMapping端点进行任何调用之前,先在客户端上分配特定的错误处理程序订阅。然后,使用try catch块将对方法的所有调用包装在您的websocket服务器中,并处理发生的异常。然后做一个简单的事情,像这样:

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

您可以向客户端发送错误消息并允许其处理,也可以决定在服务器端执行什么操作并进行控制订阅,以允许服务器将命令传递给客户端。