gpt4 book ai didi

java - 从 Spring Websocket 程序发送 STOMP ERROR

转载 作者:行者123 更新时间:2023-12-04 20:46:09 31 4
gpt4 key购买 nike

我有一个接受订阅请求的 Spring Websocket Stomp 应用程序。

在应用程序中,我有一个 SUBSCRIBE 处理程序,即

 @Component
public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> {

@Override
public void onApplicationEvent(SessionSubscribeEvent event) {}
}

我用来验证订阅。

我会检查 onApplicationEvent 中的某些内容并将 STOMP ERROR 消息从该函数发送回客户端。

我找到了这个食谱 How to send ERROR message to STOMP clients with Spring WebSocket?但我需要了解如何获取 outboundChannel。

我还尝试了以下代码:
   public void sendStompError(SimpMessagingTemplate simpMessagingTemplate, String sessionId, String topic, String errorMessage) {

StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.ERROR);
headerAccessor.setMessage(errorMessage);
headerAccessor.setSessionId(sessionId);
headerAccessor.setLeaveMutable(true);
simpMessagingTemplate.convertAndSendToUser(sessionId, topic, new byte[0], headerAccessor.getMessageHeaders());
}

我尝试将主题作为订阅主题和/queue/error 主题。但是我没有看到消息传播到客户端。

在客户端,我使用:
      stompClient.connect(headers
, function (frame) {
console.log("Conn OK " + url);
}, function (error) {
console.log("Conn NOT OK " + url + ": " + JSON.stringify(error));
});
}

我的目标是在我发送 STOMP ERROR 时调用函数(错误)。

请告诉我如何准确发送正确的 STOMP ERROR,例如通过获取 Outboundchannel。

最佳答案

您可以发送ERROR像这样的消息:

StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.ERROR);
headerAccessor.setMessage(error.getMessage());
headerAccessor.setSessionId(sessionId);
this.clientOutboundChannel.send(MessageBuilder.createMessage(new byte[0], headerAccessor.getMessageHeaders()));

以下内容足以注入(inject) clientOutboundChannel :
 @Autowired
@Qualifier("clientOutboundChannel")
private MessageChannel clientOutboundChannel;

只是因为 clientOutboundChannel bean 在 AbstractMessageBrokerConfiguration 中声明.

更新

STOMP ERROR always closes connection? I am getting this effect. Code 1002.



是的。见 StompSubProtocolHandler.sendToClient() :
       if (StompCommand.ERROR.equals(command)) {
try {
session.close(CloseStatus.PROTOCOL_ERROR);
}
catch (IOException ex) {
// Ignore
}
}

关于java - 从 Spring Websocket 程序发送 STOMP ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641477/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com