Spring boot 如何检测RSocket连接是否成功?
我有以下程序,通过它我可以检测连接故障,即Dobeforetry 有人能告诉我如何检测成功的连接或重新连接吗。我想集成一个监视此连接的运行状况检查程序,但无法捕获通知连接成功的事件Spring boot 如何检测RSocket连接是否成功?,spring-boot,rsocket,spring-boot-rsocket,Spring Boot,Rsocket,Spring Boot Rsocket,我有以下程序,通过它我可以检测连接故障,即Dobeforetry 有人能告诉我如何检测成功的连接或重新连接吗。我想集成一个监视此连接的运行状况检查程序,但无法捕获通知连接成功的事件 @MessageMapping("server-handshake") public Mono<ConsumerPreference> handshake(final String response){ LOG.info("Server
@MessageMapping("server-handshake")
public Mono<ConsumerPreference> handshake(final String response){
LOG.info("Server Connection Handshake received : Server message [{}]", response.getCallerName());
connectionSuccess.set(true);
return Mono.empty();
}else{
throw new InitializationException("Invalid response message received from Server");
}
}
谢谢
requester = RSocketRequester.builder()
.rsocketConnector(connector -> {
connector.reconnect(Retry
.fixedDelay(Integer.MAX_VALUE,Duration.ofSeconds(1))
.doBeforeRetry(e-> System.out.println("doBeforeRetry===>"+e))
.doAfterRetry(e-> System.out.println("doAfterRetry===>"+e))
);
connector.payloadDecoder(PayloadDecoder.ZERO_COPY);
}
).dataMimeType(MediaType.APPLICATION_CBOR)
.rsocketStrategies(strategies)
.tcp("localhost", 7999);
如果你想知道它是否真的健康,你应该有一个辅助任务来轮询RSocket的健康状况,方法是向你的后端发送一个自定义ping协议。您可以计时并确认连接正常,记录延迟和成功/失败。我通过以下方法检测到成功连接或重新连接 客户端(连接初始化) 在客户端,当我通过下面的方法收到回调时,我检测到连接成功
@MessageMapping("server-handshake")
public Mono<ConsumerPreference> handshake(final String response){
LOG.info("Server Connection Handshake received : Server message [{}]", response.getCallerName());
connectionSuccess.set(true);
return Mono.empty();
}else{
throw new InitializationException("Invalid response message received from Server");
}
}
@MessageMapping(“服务器握手”)
公共单声道握手(最终字符串响应){
info(“接收到服务器连接握手:服务器消息[{}]”,response.getCallerName();
connectionSuccess.set(真);
返回Mono.empty();
}否则{
抛出新的InitializationException(“接收到来自服务器的无效响应消息”);
}
}
此外,还创建了应用程序级心跳信号,以确保连接的活跃性。。但是,如果有用于通知连接断开和错误的处理程序,例如doOnError、doOnTermination等,为什么我们不能有通知成功连接的方法呢?限制是什么?我已经实现了一个与您建议的解决方案类似的解决方案,即定期使用服务器的轮询机制,以查看我是否返回响应,从而验证连接是否良好。我觉得很干净,100%同意。我认为目前需要公关来揭露这一特殊事件,以可观察的方式成功地重新连接。这可能是可能的,我只是不知道如何实现,所以可能值得提出一个功能请求,感谢Yuri的回复。我已经用rsocketjava创建了一个增强问题。
@MessageMapping("server-handshake")
public Mono<ConsumerPreference> handshake(final String response){
LOG.info("Server Connection Handshake received : Server message [{}]", response.getCallerName());
connectionSuccess.set(true);
return Mono.empty();
}else{
throw new InitializationException("Invalid response message received from Server");
}
}