Spring boot 如何检测RSocket连接是否成功?

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

我有以下程序,通过它我可以检测连接故障,即Dobeforetry

有人能告诉我如何检测成功的连接或重新连接吗。我想集成一个监视此连接的运行状况检查程序,但无法捕获通知连接成功的事件

   @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");
        }
    }