Ask*_*mov 2 java spring spring-messaging spring-websocket
我有一个Spring Websocket Stomp应用程序,它接受SUBSCRIBE请求.
在应用程序中,我有一个SUBSCRIBE的处理程序,即
@Component
public class SubscribeStompEventHandler implements ApplicationListener<SessionSubscribeEvent> {
@Override
public void onApplicationEvent(SessionSubscribeEvent event) {}
}
Run Code Online (Sandbox Code Playgroud)
我用来验证订阅.
我会检查onApplicationEvent中的某些内容并从此函数将STOMP ERROR消息发送回客户端.
我找到了这个配方如何使用Spring WebSocket向STOMP客户端发送ERROR消息?但我需要了解如何获得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());
}
Run Code Online (Sandbox Code Playgroud)
我试过主题成为一些subsciption主题和/ queue/error主题.但是我没有看到消息传播到客户端.
在客户端,我使用:
stompClient.connect(headers
, function (frame) {
console.log("Conn OK " + url);
}, function (error) {
console.log("Conn NOT OK " + url + ": " + JSON.stringify(error));
});
}
Run Code Online (Sandbox Code Playgroud)
我的目标是在发送STOMP ERROR时调用函数(错误).
请告诉我如何发送正确的STOMP错误,例如通过获取Outboundchannel.
Art*_*lan 10
您可以ERROR像这样发送消息:
StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.ERROR);
headerAccessor.setMessage(error.getMessage());
headerAccessor.setSessionId(sessionId);
this.clientOutboundChannel.send(MessageBuilder.createMessage(new byte[0], headerAccessor.getMessageHeaders()));
Run Code Online (Sandbox Code Playgroud)
以下就足以注入clientOutboundChannel:
@Autowired
@Qualifier("clientOutboundChannel")
private MessageChannel clientOutboundChannel;
Run Code Online (Sandbox Code Playgroud)
只是因为clientOutboundChannelbean被声明了AbstractMessageBrokerConfiguration.
UPDATE
STOMP ERROR总是关闭连接?我得到了这个效果.代码1002.
是的.见StompSubProtocolHandler.sendToClient():
if (StompCommand.ERROR.equals(command)) {
try {
session.close(CloseStatus.PROTOCOL_ERROR);
}
catch (IOException ex) {
// Ignore
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3138 次 |
| 最近记录: |