【问题标题】:Error handling while using STOMP simple broker使用 STOMP 简单代理时的错误处理
【发布时间】:2019-08-26 09:43:54
【问题描述】:

我正在使用 @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

RuntimeException发生在@MessageMapping方法中时,如何启用发送ERROR帧的机制?

【问题讨论】:

    标签: spring spring-websocket stomp spring-messaging


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,我试过了,但它正在发送 MESSAGE 帧,我想实现发送错误帧,这是 STOMP 标准的一部分。
    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2011-09-30
    • 2015-08-09
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多