我使用以下配置将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();
1条答案
按热度按时间6yjfywim1#
您可以使用以下代码实现所需的行为:
在上面的示例中,一旦连接丢失
rsocket.onClose()
将发送终端信号。由于已安装重新连接功能,因此RSocketClient.source()
将导致重新建立连接。因此,一旦发生这种情况,您将收到一个新的rsocket示例并订阅onClose
再往里流flatMap
接线员。为了重复这个操作,我们可以使用
.repeat
以及retry
所以无论什么时候onClose
终止(这是断开连接的指示器)对的订阅RSocketClient.source
将被重复,您将能够获得一个新的连接,并开始收听onClose
再次流