Spring Boot2.4 rsocket反复检测断开连接

vsdwdz23  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(492)

我使用以下配置将rsocketclient连接到rsocketserver。这很有效。我想检测连接中断。这可以通过注册到rsocketclient的底层rsocket的onclose mono来实现。但只有一次。如果重复出现连接丢失和重新连接,如何检测关闭?

requester = rsocketRequesterBuilder.setupRoute("shell-client").setupData(CLIENT_ID)
                        .setupMetadata(accessToken, BearerTokenMetadata.BEARER_AUTHENTICATION_MIME_TYPE)
                        .rsocketStrategies(rsocketStrategies).
                        rsocketConnector(connector -> connector.acceptor(responder).reconnect(Retry.backoff(1000, Duration.ofMillis(500)).doBeforeRetry(x->{log.info("Retry");

                        }).doAfterRetry(x->{log.info(x.toString());})))
                        .tcp("x.y.z.40", 8080);

                RSocket r=requester.rsocketClient().source().block();
                r.onClose().doOnError(x->{
                    log.info("Error");}).doFinally(x->{
                    log.info("Disconnected");
                }).subscribe();
6yjfywim

6yjfywim1#

您可以使用以下代码实现所需的行为:

requester
       .rsocketClient()
       .source()
       .flatMap(rsocket -> rsocket.onClose())
       .repeat()
       .retry()
       .subscribe();

在上面的示例中,一旦连接丢失 rsocket.onClose() 将发送终端信号。由于已安装重新连接功能,因此 RSocketClient.source() 将导致重新建立连接。因此,一旦发生这种情况,您将收到一个新的rsocket示例并订阅 onClose 再往里流 flatMap 接线员。
为了重复这个操作,我们可以使用 .repeat 以及 retry 所以无论什么时候 onClose 终止(这是断开连接的指示器)对的订阅 RSocketClient.source 将被重复,您将能够获得一个新的连接,并开始收听 onClose 再次流

相关问题