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

问题描述 投票:0回答:1

我正在使用@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帧的机制?

spring spring-websocket stomp spring-messaging
1个回答
0
投票

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

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

您可以向客户端发送错误消息并允许它处理它或决定服务器端做什么,并具有允许服务器将命令传递给客户端的控制订阅。

© www.soinside.com 2019 - 2024. All rights reserved.