diff --git a/spring-integration-rsocket/src/main/java/org/springframework/integration/rsocket/ClientRSocketConnector.java b/spring-integration-rsocket/src/main/java/org/springframework/integration/rsocket/ClientRSocketConnector.java index 74c06ba6ea..30a650f035 100644 --- a/spring-integration-rsocket/src/main/java/org/springframework/integration/rsocket/ClientRSocketConnector.java +++ b/spring-integration-rsocket/src/main/java/org/springframework/integration/rsocket/ClientRSocketConnector.java @@ -26,12 +26,11 @@ import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.util.Assert; import org.springframework.util.MimeType; -import io.rsocket.core.RSocketConnector; import io.rsocket.transport.ClientTransport; import io.rsocket.transport.netty.client.TcpClientTransport; import io.rsocket.transport.netty.client.WebsocketClientTransport; +import reactor.core.Disposable; import reactor.core.publisher.Mono; -import reactor.core.publisher.Sinks; /** * A client {@link AbstractRSocketConnector} extension to the RSocket connection. @@ -40,7 +39,7 @@ import reactor.core.publisher.Sinks; * * @since 5.2 * - * @see io.rsocket.RSocketFactory.ClientRSocketFactory + * @see io.rsocket.core.RSocketConnector * @see RSocketRequester */ public class ClientRSocketConnector extends AbstractRSocketConnector { @@ -176,27 +175,21 @@ public class ClientRSocketConnector extends AbstractRSocketConnector { public void afterPropertiesSet() { super.afterPropertiesSet(); - Sinks.StandaloneMonoSink rsocketConnector = Sinks.promise(); - - RSocketRequester rsocketRequester = - RSocketRequester.builder() - .dataMimeType(getDataMimeType()) - .metadataMimeType(getMetadataMimeType()) - .rsocketStrategies(getRSocketStrategies()) - .setupData(this.setupData) - .setupRoute(this.setupRoute, this.setupRouteVars) - .apply((builder) -> this.setupMetadata.forEach(builder::setupMetadata)) - .rsocketConnector(this.connectorConfigurer) - .rsocketConnector((connector) -> { - connector.acceptor(this.rSocketMessageHandler.responder()); - rsocketConnector.success(connector); - }) - .transport(this.clientTransport); + RSocketRequester rsocketRequester = RSocketRequester.builder() + .dataMimeType(getDataMimeType()) + .metadataMimeType(getMetadataMimeType()) + .rsocketStrategies(getRSocketStrategies()) + .setupData(this.setupData) + .setupRoute(this.setupRoute, this.setupRouteVars) + .rsocketConnector(this.connectorConfigurer) + .rsocketConnector((connector) -> + connector.acceptor(this.rSocketMessageHandler.responder())) + .apply((builder) -> this.setupMetadata.forEach(builder::setupMetadata)) + .transport(this.clientTransport); this.rsocketRequesterMono = - rsocketConnector.asMono() - .flatMap(rSocketConnector -> rSocketConnector.connect(this.clientTransport)) - .thenReturn(rsocketRequester) + Mono.just(rsocketRequester) + .doOnSubscribe((sub) -> rsocketRequester.rsocketClient().source().subscribe()) .cache(); } @@ -215,7 +208,8 @@ public class ClientRSocketConnector extends AbstractRSocketConnector { @Override public void destroy() { this.rsocketRequesterMono - .doOnNext(RSocketRequester::dispose) + .flatMap((requester) -> requester.rsocketClient().source()) + .doOnNext(Disposable::dispose) .subscribe(); } diff --git a/spring-integration-rsocket/src/test/java/org/springframework/integration/rsocket/outbound/RSocketOutboundGatewayIntegrationTests.java b/spring-integration-rsocket/src/test/java/org/springframework/integration/rsocket/outbound/RSocketOutboundGatewayIntegrationTests.java index 1cf39595ed..43ac203ae1 100644 --- a/spring-integration-rsocket/src/test/java/org/springframework/integration/rsocket/outbound/RSocketOutboundGatewayIntegrationTests.java +++ b/spring-integration-rsocket/src/test/java/org/springframework/integration/rsocket/outbound/RSocketOutboundGatewayIntegrationTests.java @@ -59,10 +59,8 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import io.rsocket.RSocket; -import io.rsocket.core.RSocketConnector; import io.rsocket.core.RSocketServer; import io.rsocket.frame.decoder.PayloadDecoder; -import io.rsocket.transport.netty.client.TcpClientTransport; import io.rsocket.transport.netty.server.CloseableChannel; import io.rsocket.transport.netty.server.TcpServerTransport; import reactor.core.Disposable; @@ -499,21 +497,15 @@ public class RSocketOutboundGatewayIntegrationTests { @Bean(destroyMethod = "dispose") @Nullable public RSocket rsocketForServerRequests() { - Sinks.StandaloneMonoSink rsocketConnector = Sinks.promise(); - RSocketRequester.builder() + return RSocketRequester.builder() .setupRoute("clientConnect") - .rsocketConnector(connector -> { - connector.acceptor( - RSocketMessageHandler.responder(RSocketStrategies.create(), controller())); - rsocketConnector.success(connector); - }) - .tcp("localhost", server.address().getPort()); - - return rsocketConnector.asMono() - .flatMap(rSocketConnector -> - rSocketConnector.connect( - TcpClientTransport.create("localhost", server.address().getPort()))) + .rsocketConnector(connector -> + connector.acceptor( + RSocketMessageHandler.responder(RSocketStrategies.create(), controller()))) + .tcp("localhost", server.address().getPort()) + .rsocketClient() + .source() .block(); }