自学内容网 自学内容网

WebSocket STOMP协议服务端给客户端发送ERROR帧

第一种:手动主装ERROR帧发送

import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.socket.messaging.StompSubProtocolErrorHandler;

public class CustomStompErrorHandler extends StompSubProtocolErrorHandler {

    @Override
    public Message<byte[]> handleClientMessageProcessingError(Message<byte[]> clientMessage, Throwable ex) {
        // 创建ERROR帧的头部信息
        StompHeaderAccessor errorAccessor = StompHeaderAccessor.create(StompCommand.ERROR);
        
        // 设置错误信息
        errorAccessor.setMessage(ex.getMessage());
        
        // 设置会话ID
        StompHeaderAccessor clientAccessor = StompHeaderAccessor.wrap(clientMessage);
        errorAccessor.setSessionId(clientAccessor.getSessionId());
        
        // 保留其他必要的头部信息
        errorAccessor.setLeaveMutable(true);
        
        // 创建并返回ERROR帧消息
        return MessageBuilder.createMessage(new byte[0], errorAccessor.getMessageHeaders());
    }
}

将自定义的这个在配置中注入

// 注册自定义错误处理器
    @Bean
    public CustomStompErrorHandler customStompErrorHandler() {
        return new CustomStompErrorHandler();
    }
    

第二种:直接抛出MessageDeliveryException这个异常,Spring框架会自己去找StompSubProtocolErrorHandler然后处理

 throw new MessageDeliveryException("直接抛出");


原文地址:https://blog.csdn.net/WangKun_0612/article/details/151110206

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!