diff --git a/spring-cloud-gateway-dependencies/pom.xml b/spring-cloud-gateway-dependencies/pom.xml index 17df4828..f889bc75 100644 --- a/spring-cloud-gateway-dependencies/pom.xml +++ b/spring-cloud-gateway-dependencies/pom.xml @@ -43,6 +43,21 @@ spring-cloud-gateway-rsocket ${project.version} + + org.springframework.cloud + spring-cloud-gateway-rsocket-common + ${project.version} + + + org.springframework.cloud + spring-cloud-gateway-rsocket-client + ${project.version} + + + org.springframework.cloud + spring-cloud-gateway-rsocket-broker + ${project.version} + org.springframework.cloud spring-cloud-starter-gateway diff --git a/spring-cloud-gateway-rsocket/pom.xml b/spring-cloud-gateway-rsocket/pom.xml index 1b9d86e4..8fbd9048 100644 --- a/spring-cloud-gateway-rsocket/pom.xml +++ b/spring-cloud-gateway-rsocket/pom.xml @@ -29,129 +29,12 @@ spring-cloud-gateway-rsocket Spring Cloud Gateway RSocket Spring Cloud Gateway RSocket + pom - - - org.springframework.boot - spring-boot-starter-rsocket - - - org.springframework.boot - spring-boot-configuration-processor - true - - - io.rsocket - rsocket-core - - - io.rsocket - rsocket-micrometer - - - io.rsocket - rsocket-transport-netty - - - io.micrometer - micrometer-core - - - org.roaringbitmap - RoaringBitmap - - - org.springframework.boot - spring-boot-starter-actuator - test - - - org.projectlombok - lombok - test - - - org.springframework.boot - spring-boot-starter-test - test - - - io.projectreactor - reactor-test - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - -parameters - - - - - - default-compile - none - - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.0 - - - - test-jar - - - - - - - - - java8plus - - [1.8,2.0) - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - -parameters - - - - - - - + + spring-cloud-gateway-rsocket-common + spring-cloud-gateway-rsocket-client + spring-cloud-gateway-rsocket-broker + diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/pom.xml b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/pom.xml new file mode 100644 index 00000000..a9e50759 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/pom.xml @@ -0,0 +1,168 @@ + + + + + 4.0.0 + + org.springframework.cloud + spring-cloud-gateway-rsocket + 2.2.0.BUILD-SNAPSHOT + .. + + org.springframework.cloud + spring-cloud-gateway-rsocket-broker + Spring Cloud Gateway RSocket Broker + Spring Cloud Gateway RSocket Broker + + + + org.springframework.cloud + spring-cloud-gateway-rsocket-common + + + org.springframework.boot + spring-boot-starter-rsocket + + + org.springframework.boot + spring-boot-configuration-processor + true + + + io.rsocket + rsocket-core + + + io.rsocket + rsocket-micrometer + + + io.rsocket + rsocket-transport-netty + + + io.micrometer + micrometer-core + + + org.roaringbitmap + RoaringBitmap + + + org.springframework.boot + spring-boot-starter-actuator + test + + + org.projectlombok + lombok + test + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + org.springframework.cloud + spring-cloud-gateway-rsocket-common + ${project.version} + test-jar + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + default-compile + none + + + + default-testCompile + none + + + java-compile + compile + + compile + + + + java-test-compile + test-compile + + testCompile + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + test-jar + + + + + + + + + java8plus + + [1.8,2.0) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + + + + diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java similarity index 93% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java index 34acc5b2..972a9943 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/BrokerInfo.java @@ -20,9 +20,9 @@ import java.math.BigInteger; import java.util.Map; import java.util.Objects; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata.Key; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata.Key; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuator.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuator.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuator.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuator.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java index 7e238481..1a79b653 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrar.java @@ -29,7 +29,7 @@ import io.rsocket.frame.SetupFrameFlyweight; import io.rsocket.util.DefaultPayload; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable; import org.springframework.context.SmartLifecycle; import org.springframework.core.io.buffer.DataBufferFactory; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java similarity index 81% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java index 9b35e8cd..a1167f83 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteJoin.java @@ -20,9 +20,9 @@ import java.math.BigInteger; import java.util.Map; import java.util.Objects; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata.Key; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata.Key; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; @@ -38,7 +38,8 @@ public final class RouteJoin { private final Map tags; - public RouteJoin(BigInteger brokerId, BigInteger routeId, long timestamp, String serviceName, Map tags) { + public RouteJoin(BigInteger brokerId, BigInteger routeId, long timestamp, + String serviceName, Map tags) { this.brokerId = brokerId; this.routeId = routeId; this.timestamp = timestamp; @@ -75,27 +76,24 @@ public final class RouteJoin { return false; } RouteJoin routeJoin = (RouteJoin) o; - return this.timestamp == routeJoin.timestamp && - Objects.equals(this.brokerId, routeJoin.brokerId) && - Objects.equals(this.routeId, routeJoin.routeId) && - Objects.equals(this.serviceName, routeJoin.serviceName) && - Objects.equals(this.tags, routeJoin.tags); + return this.timestamp == routeJoin.timestamp + && Objects.equals(this.brokerId, routeJoin.brokerId) + && Objects.equals(this.routeId, routeJoin.routeId) + && Objects.equals(this.serviceName, routeJoin.serviceName) + && Objects.equals(this.tags, routeJoin.tags); } @Override public int hashCode() { - return Objects.hash(this.brokerId, this.routeId, this.timestamp, this.serviceName, this.tags); + return Objects.hash(this.brokerId, this.routeId, this.timestamp, this.serviceName, + this.tags); } @Override public String toString() { - return new ToStringCreator(this) - .append("brokerId", brokerId) - .append("routeId", routeId) - .append("timestamp", timestamp) - .append("serviceName", serviceName) - .append("tags", tags) - .toString(); + return new ToStringCreator(this).append("brokerId", brokerId) + .append("routeId", routeId).append("timestamp", timestamp) + .append("serviceName", serviceName).append("tags", tags).toString(); } diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java similarity index 89% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java index a53f7b99..817e3a44 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/actuate/RouteRemove.java @@ -57,9 +57,9 @@ public final class RouteRemove { return false; } RouteRemove routeJoin = (RouteRemove) o; - return this.timestamp == routeJoin.timestamp && - Objects.equals(this.brokerId, routeJoin.brokerId) && - Objects.equals(this.routeId, routeJoin.routeId); + return this.timestamp == routeJoin.timestamp + && Objects.equals(this.brokerId, routeJoin.brokerId) + && Objects.equals(this.routeId, routeJoin.routeId); } @Override @@ -69,11 +69,8 @@ public final class RouteRemove { @Override public String toString() { - return new ToStringCreator(this) - .append("brokerId", brokerId) - .append("routeId", routeId) - .append("timestamp", timestamp) - .toString(); + return new ToStringCreator(this).append("brokerId", brokerId) + .append("routeId", routeId).append("timestamp", timestamp).toString(); } diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java similarity index 79% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java index 9db37f74..02f02779 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfiguration.java @@ -21,21 +21,20 @@ import java.util.List; import io.micrometer.core.instrument.MeterRegistry; import io.rsocket.RSocket; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.rsocket.RSocketServerAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.rsocket.messaging.RSocketStrategiesCustomizer; import org.springframework.boot.rsocket.server.RSocketServerBootstrap; import org.springframework.boot.rsocket.server.RSocketServerFactory; import org.springframework.cloud.gateway.rsocket.actuate.GatewayRSocketActuator; import org.springframework.cloud.gateway.rsocket.actuate.GatewayRSocketActuatorRegistrar; +import org.springframework.cloud.gateway.rsocket.common.autoconfigure.GatewayRSocketCommonAutoConfiguration; import org.springframework.cloud.gateway.rsocket.core.GatewayRSocketFactory; import org.springframework.cloud.gateway.rsocket.core.GatewayServerRSocketFactoryCustomizer; import org.springframework.cloud.gateway.rsocket.core.PendingRequestRSocketFactory; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.routing.LoadBalancerFactory; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable; @@ -48,14 +47,9 @@ import org.springframework.cloud.gateway.rsocket.socketacceptor.SocketAcceptorPr import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; -import org.springframework.messaging.rsocket.DefaultMetadataExtractor; -import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; -import static org.springframework.cloud.gateway.rsocket.metadata.Forwarding.FORWARDING_MIME_TYPE; -import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; - /** * @author Spencer Gibb */ @@ -65,6 +59,7 @@ import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetup.ROUT @EnableConfigurationProperties @ConditionalOnClass(RSocket.class) @AutoConfigureBefore(RSocketServerAutoConfiguration.class) +@AutoConfigureAfter(GatewayRSocketCommonAutoConfiguration.class) public class GatewayRSocketAutoConfiguration { @Bean @@ -127,23 +122,8 @@ public class GatewayRSocketAutoConfiguration { public GatewaySocketAcceptor socketAcceptor(GatewayRSocketFactory rsocketFactory, List filters, MeterRegistry meterRegistry, GatewayRSocketProperties properties, RSocketStrategies rSocketStrategies) { - MetadataExtractor metadataExtractor = registerMimeTypes(rSocketStrategies); return new GatewaySocketAcceptor(rsocketFactory, filters, meterRegistry, - properties, metadataExtractor); - } - - public static MetadataExtractor registerMimeTypes( - RSocketStrategies rSocketStrategies) { - MetadataExtractor metadataExtractor = rSocketStrategies.metadataExtractor(); - // TODO: see if possible to make easier in framework. - if (metadataExtractor instanceof DefaultMetadataExtractor) { - DefaultMetadataExtractor extractor = (DefaultMetadataExtractor) metadataExtractor; - extractor.metadataToExtract(FORWARDING_MIME_TYPE, Forwarding.class, - Forwarding.METADATA_KEY); - extractor.metadataToExtract(ROUTE_SETUP_MIME_TYPE, RouteSetup.class, - RouteSetup.METADATA_KEY); - } - return metadataExtractor; + properties, rSocketStrategies.metadataExtractor()); } @Bean @@ -159,14 +139,6 @@ public class GatewayRSocketAutoConfiguration { return new RSocketServerBootstrap(rSocketServerFactory, gatewaySocketAcceptor); } - @Bean - public RSocketStrategiesCustomizer gatewayRSocketStrategiesCustomizer() { - return strategies -> { - strategies.decoder(new Forwarding.Decoder(), new RouteSetup.Decoder()) - .encoder(new Forwarding.Encoder(), new RouteSetup.Encoder()); - }; - } - @Bean public GatewayRSocketActuatorRegistrar gatewayRSocketActuatorRegistrar( RoutingTable routingTable, RSocketMessageHandler messageHandler, diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketEnvironmentPostProcessor.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketEnvironmentPostProcessor.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketEnvironmentPostProcessor.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketEnvironmentPostProcessor.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketProperties.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketProperties.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketProperties.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketProperties.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java index f3525f99..ee08337b 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/AbstractGatewayRSocket.java @@ -25,7 +25,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java similarity index 95% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java index 31ec79f7..b552d8a7 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayExchange.java @@ -23,9 +23,9 @@ import io.rsocket.Payload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.Metadata; import org.springframework.cloud.gateway.rsocket.filter.AbstractRSocketExchange; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.Metadata; import org.springframework.messaging.rsocket.MetadataExtractor; /** diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilter.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilter.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilter.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilter.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilterChain.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilterChain.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilterChain.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayFilterChain.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayPredicate.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayPredicate.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayPredicate.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayPredicate.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java index 66252b6c..8ccad6f5 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocket.java @@ -32,7 +32,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.routing.LoadBalancerFactory; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java similarity index 92% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java index ca81a1d1..7e7f8647 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketFactory.java @@ -21,15 +21,15 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.routing.LoadBalancerFactory; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable; import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.util.Assert; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.ROUTE_ID; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.SERVICE_NAME; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.ROUTE_ID; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.SERVICE_NAME; public class GatewayRSocketFactory { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayServerRSocketFactoryCustomizer.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayServerRSocketFactoryCustomizer.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayServerRSocketFactoryCustomizer.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/GatewayServerRSocketFactoryCustomizer.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java index 8e9e28fc..0cf7183a 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocket.java @@ -33,8 +33,8 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.MonoProcessor; import reactor.util.function.Tuple2; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.filter.RSocketFilter.Success; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable.RegisteredEvent; import org.springframework.messaging.rsocket.MetadataExtractor; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java index e4bb500b..10e522c0 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/core/PendingRequestRSocketFactory.java @@ -27,7 +27,7 @@ import org.apache.commons.logging.LogFactory; import reactor.core.Disposable; import reactor.core.publisher.Mono; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractFilterChain.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractFilterChain.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractFilterChain.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractFilterChain.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractRSocketExchange.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractRSocketExchange.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractRSocketExchange.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/AbstractRSocketExchange.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/FilterChain.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/FilterChain.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/FilterChain.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/FilterChain.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketExchange.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketExchange.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketExchange.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketExchange.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketFilter.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketFilter.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketFilter.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/filter/RSocketFilter.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocket.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocket.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocket.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocket.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocketInterceptor.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocketInterceptor.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocketInterceptor.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/metrics/MicrometerResponderRSocketInterceptor.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java index 03d4072f..33271ba9 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/DefaultRoute.java @@ -23,9 +23,9 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; import org.springframework.cloud.gateway.rsocket.core.GatewayExchange; import org.springframework.cloud.gateway.rsocket.core.GatewayFilter; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; import org.springframework.cloud.gateway.rsocket.support.AsyncPredicate; import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/Route.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/Route.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/Route.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/Route.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/Routes.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/Routes.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/route/Routes.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/route/Routes.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java index ad1f0440..4bd690b9 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/LoadBalancerFactory.java @@ -27,7 +27,7 @@ import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Mono; import reactor.util.function.Tuple2; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; public class LoadBalancerFactory { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java index c6464e36..7c6c61a9 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTable.java @@ -39,8 +39,8 @@ import reactor.core.publisher.FluxSink; import reactor.util.function.Tuple2; import reactor.util.function.Tuples; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -95,8 +95,8 @@ public class RoutingTable { routeEntry.getTags().forEach((key, value) -> { // TODO: deal with string keys? - RoaringBitmap bitmap = tagsToBitmaps.computeIfAbsent( - new TagKey(key, value), k -> new RoaringBitmap()); + RoaringBitmap bitmap = tagsToBitmaps.computeIfAbsent(new TagKey(key, value), + k -> new RoaringBitmap()); bitmap.add(internalId); }); @@ -232,8 +232,11 @@ public class RoutingTable { } static class RouteEntry { + private final RSocket rSocket; + private final TagsMetadata tagsMetadata; + private final Long timestamp; RouteEntry(RSocket rSocket, TagsMetadata tagsMetadata) { @@ -277,6 +280,7 @@ public class RoutingTable { .toString(); // @formatter:on } + } static class TagKey { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java index 7ae2cd64..e978f7d3 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutes.java @@ -30,9 +30,9 @@ import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.core.GatewayExchange; import org.springframework.cloud.gateway.rsocket.core.GatewayFilter; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.support.AsyncPredicate; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableSocketAcceptorFilter.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableSocketAcceptorFilter.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableSocketAcceptorFilter.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableSocketAcceptorFilter.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java similarity index 96% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java index 5d657068..786c7ee4 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptor.java @@ -32,9 +32,9 @@ import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.core.GatewayRSocketFactory; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.metrics.MicrometerResponderRSocket; import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.util.MimeType; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java similarity index 95% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java index a2e132be..0c0f5625 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorExchange.java @@ -21,8 +21,8 @@ import java.math.BigInteger; import io.rsocket.ConnectionSetupPayload; import io.rsocket.RSocket; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; import org.springframework.cloud.gateway.rsocket.filter.AbstractRSocketExchange; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; public class SocketAcceptorExchange extends AbstractRSocketExchange { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilter.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilter.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilter.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilter.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilterChain.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilterChain.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilterChain.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorFilterChain.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicate.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicate.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicate.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicate.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilter.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilter.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilter.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilter.java diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/support/AsyncPredicate.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/support/AsyncPredicate.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/support/AsyncPredicate.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/java/org/springframework/cloud/gateway/rsocket/support/AsyncPredicate.java diff --git a/spring-cloud-gateway-rsocket/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/resources/META-INF/spring.factories similarity index 100% rename from spring-cloud-gateway-rsocket/src/main/resources/META-INF/spring.factories rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/main/resources/META-INF/spring.factories diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java similarity index 90% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java index 1be0fa19..f8c08c9d 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorIntegrationTests.java @@ -30,8 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; import org.springframework.messaging.rsocket.RSocketRequester; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.SocketUtils; @@ -47,6 +47,7 @@ import static org.springframework.cloud.gateway.rsocket.actuate.GatewayRSocketAc public class GatewayRSocketActuatorIntegrationTests { private final Random random = new Random(); + @Autowired private RSocketRequester.Builder requesterBuilder; @@ -71,7 +72,8 @@ public class GatewayRSocketActuatorIntegrationTests { BrokerInfo data = BrokerInfo.of(brokerId).build(); - Mono result = callActuator(brokerId, BrokerInfo.class, data, BROKER_INFO_PATH); + Mono result = callActuator(brokerId, BrokerInfo.class, data, + BROKER_INFO_PATH); StepVerifier.create(result) .consumeNextWith(res -> assertThat(res).isNotNull().isEqualTo(data)) @@ -86,7 +88,8 @@ public class GatewayRSocketActuatorIntegrationTests { RouteJoin data = RouteJoin.builder().brokerId(brokerId).routeId(routeId) .serviceName("testServiceName").build(); - Mono result = callActuator(brokerId, RouteJoin.class, data, ROUTE_JOIN_PATH); + Mono result = callActuator(brokerId, RouteJoin.class, data, + ROUTE_JOIN_PATH); StepVerifier.create(result) .consumeNextWith(res -> assertThat(res).isNotNull().isEqualTo(data)) @@ -101,7 +104,8 @@ public class GatewayRSocketActuatorIntegrationTests { RouteRemove data = RouteRemove.builder().brokerId(brokerId).routeId(routeId) .build(); - Mono result = callActuator(brokerId, RouteRemove.class, data, ROUTE_REMOVE_PATH); + Mono result = callActuator(brokerId, RouteRemove.class, data, + ROUTE_REMOVE_PATH); StepVerifier.create(result) .consumeNextWith(res -> assertThat(res).isNotNull().isEqualTo(data)) @@ -115,12 +119,11 @@ public class GatewayRSocketActuatorIntegrationTests { .setupMetadata(routeSetup, RouteSetup.ROUTE_SETUP_MIME_TYPE) .connectTcp("localhost", port).block(); - Forwarding forwarding = Forwarding.of(brokerId).serviceName("gateway").disableProxy() - .build(); + Forwarding forwarding = Forwarding.of(brokerId).serviceName("gateway") + .disableProxy().build(); - return requester.route(path) - .metadata(forwarding, Forwarding.FORWARDING_MIME_TYPE).data(data) - .retrieveMono(type); + return requester.route(path).metadata(forwarding, Forwarding.FORWARDING_MIME_TYPE) + .data(data).retrieveMono(type); } @SpringBootConfiguration diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrarTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrarTests.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrarTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/actuate/GatewayRSocketActuatorRegistrarTests.java diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfigurationTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfigurationTests.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfigurationTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/autoconfigure/GatewayRSocketAutoConfigurationTests.java diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketIntegrationTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketIntegrationTests.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketIntegrationTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketIntegrationTests.java diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java similarity index 94% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java index b08320c0..e16a3794 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/core/GatewayRSocketTests.java @@ -39,17 +39,17 @@ import reactor.util.function.Tuple2; import reactor.util.function.Tuples; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.Metadata; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.Metadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.test.MetadataEncoder; import org.springframework.cloud.gateway.rsocket.route.DefaultRoute; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.route.Routes; import org.springframework.cloud.gateway.rsocket.routing.LoadBalancerFactory; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable; -import org.springframework.cloud.gateway.rsocket.test.MetadataEncoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.messaging.rsocket.DefaultMetadataExtractor; import org.springframework.messaging.rsocket.MetadataExtractor; @@ -60,7 +60,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.cloud.gateway.rsocket.metadata.Forwarding.FORWARDING_MIME_TYPE; +import static org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding.FORWARDING_MIME_TYPE; /** * @author Spencer Gibb diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java similarity index 93% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java index 954ace6e..1ca106d1 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableRoutesTests.java @@ -23,9 +23,9 @@ import org.junit.Test; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.core.GatewayExchange; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; import org.springframework.cloud.gateway.rsocket.route.Route; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable.RegisteredEvent; import org.springframework.cloud.gateway.rsocket.routing.RoutingTable.RouteEntry; diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java similarity index 96% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java index 7dcfeb98..a80a7b84 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/routing/RoutingTableTests.java @@ -26,8 +26,8 @@ import org.roaringbitmap.RoaringBitmap; import reactor.util.function.Tuple2; import reactor.util.function.Tuples; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; import org.springframework.core.style.ToStringCreator; import static org.assertj.core.api.Assertions.assertThat; @@ -140,8 +140,7 @@ public class RoutingTableTests { routeId); assertThat(routingTable.routeEntries).containsKey(routeId); tagsMetadata.getTags().forEach((key, value) -> { - RoutingTable.TagKey tagKey = new RoutingTable.TagKey(key, - value); + RoutingTable.TagKey tagKey = new RoutingTable.TagKey(key, value); assertThat(routingTable.tagsToBitmaps).containsKey(tagKey); RoaringBitmap bitmap = routingTable.tagsToBitmaps.get(tagKey); assertThat(bitmap.contains(internalId)); diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java similarity index 94% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java index 3277bce6..dce8024d 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/GatewaySocketAcceptorTests.java @@ -32,12 +32,12 @@ import org.junit.Test; import reactor.core.publisher.Mono; import org.springframework.cloud.gateway.rsocket.autoconfigure.GatewayRSocketProperties; +import org.springframework.cloud.gateway.rsocket.common.metadata.Metadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.test.MetadataEncoder; import org.springframework.cloud.gateway.rsocket.core.GatewayRSocket; import org.springframework.cloud.gateway.rsocket.core.GatewayRSocketFactory; -import org.springframework.cloud.gateway.rsocket.metadata.Metadata; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.test.MetadataEncoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.messaging.rsocket.DefaultMetadataExtractor; import org.springframework.messaging.rsocket.PayloadUtils; @@ -48,7 +48,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; +import static org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; /** * @author Spencer Gibb diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilterTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilterTests.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilterTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/socketacceptor/SocketAcceptorPredicateFilterTests.java diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java similarity index 94% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java index 3ae2c865..03986e32 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/test/PingPongApp.java @@ -45,13 +45,14 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; +import org.springframework.cloud.gateway.rsocket.common.test.MetadataEncoder; import org.springframework.cloud.gateway.rsocket.core.GatewayExchange; import org.springframework.cloud.gateway.rsocket.core.GatewayFilter; import org.springframework.cloud.gateway.rsocket.core.GatewayFilterChain; -import org.springframework.cloud.gateway.rsocket.metadata.Forwarding; -import org.springframework.cloud.gateway.rsocket.metadata.RouteSetup; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata; -import org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey; import org.springframework.cloud.gateway.rsocket.socketacceptor.SocketAcceptorExchange; import org.springframework.cloud.gateway.rsocket.socketacceptor.SocketAcceptorFilter; import org.springframework.cloud.gateway.rsocket.socketacceptor.SocketAcceptorFilterChain; @@ -63,8 +64,8 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.messaging.rsocket.RSocketStrategies; import static io.netty.buffer.Unpooled.EMPTY_BUFFER; -import static org.springframework.cloud.gateway.rsocket.metadata.Metadata.COMPOSITE_MIME_TYPE; -import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; +import static org.springframework.cloud.gateway.rsocket.common.metadata.Metadata.COMPOSITE_MIME_TYPE; +import static org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; @SpringBootApplication public class PingPongApp { diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/SocketAcceptorFilterOrderTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/test/SocketAcceptorFilterOrderTests.java similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/SocketAcceptorFilterOrderTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/java/org/springframework/cloud/gateway/rsocket/test/SocketAcceptorFilterOrderTests.java diff --git a/spring-cloud-gateway-rsocket/src/test/resources/application.yml b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/resources/application.yml similarity index 100% rename from spring-cloud-gateway-rsocket/src/test/resources/application.yml rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-broker/src/test/resources/application.yml diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/pom.xml b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/pom.xml new file mode 100644 index 00000000..36860a83 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/pom.xml @@ -0,0 +1,145 @@ + + + + + 4.0.0 + + org.springframework.cloud + spring-cloud-gateway-rsocket + 2.2.0.BUILD-SNAPSHOT + .. + + org.springframework.cloud + spring-cloud-gateway-rsocket-client + Spring Cloud Gateway RSocket Client + Spring Cloud Gateway RSocket Client + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-starter-rsocket + + + org.springframework.cloud + spring-cloud-gateway-rsocket-common + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.springframework.boot + spring-boot-starter-actuator + test + + + org.projectlombok + lombok + test + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + default-compile + none + + + + default-testCompile + none + + + java-compile + compile + + compile + + + + java-test-compile + test-compile + + testCompile + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + test-jar + + + + + + + + + java8plus + + [1.8,2.0) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + + + + diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/BrokerClient.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/BrokerClient.java new file mode 100644 index 00000000..054fc651 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/BrokerClient.java @@ -0,0 +1,75 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.rsocket.client; + +import java.util.function.Consumer; + +import reactor.core.publisher.Mono; + +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.messaging.rsocket.RSocketRequester; + +public class BrokerClient { + + private final ClientProperties properties; + + private final RSocketRequester.Builder builder; + + public BrokerClient(ClientProperties properties, RSocketRequester.Builder builder) { + this.properties = properties; + this.builder = builder; + } + + public ClientProperties getProperties() { + return this.properties; + } + + public RSocketRequester.Builder getRSocketRequesterBuilder() { + return this.builder; + } + + public Mono connect() { + return connect(builder); + } + + public Mono connect(RSocketRequester.Builder requesterBuilder) { + ClientProperties.Broker broker = properties.getBroker(); + switch (broker.getConnectionType()) { + case WEBSOCKET: + return requesterBuilder.connectWebSocket(broker.getWsUri()); + } + return requesterBuilder.connectTcp(broker.getHost(), broker.getPort()); + } + + public Consumer forwarding(String destServiceName) { + return requestSpec -> { + Forwarding forwarding = Forwarding.of(properties.getRouteId()) + .serviceName(destServiceName).build(); + requestSpec.metadata(forwarding, Forwarding.FORWARDING_MIME_TYPE); + }; + } + + public Consumer forwarding( + Consumer builderConsumer) { + return requestSpec -> { + Forwarding.Builder builder = Forwarding.of(properties.getRouteId()); + builderConsumer.accept(builder); + requestSpec.metadata(builder.build(), Forwarding.FORWARDING_MIME_TYPE); + }; + } + +} diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/ClientProperties.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/ClientProperties.java new file mode 100644 index 00000000..d6a2f5c9 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/ClientProperties.java @@ -0,0 +1,170 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.rsocket.client; + +import java.math.BigInteger; +import java.net.URI; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey; +import org.springframework.core.style.ToStringCreator; +import org.springframework.validation.annotation.Validated; + +@ConfigurationProperties("spring.cloud.gateway.rsocket.client") +@Validated +public class ClientProperties { + + @NotNull + private BigInteger routeId; + + @NotEmpty + private String serviceName; + + private Map tags = new LinkedHashMap<>(); + + private Map customTags = new LinkedHashMap<>(); + + @Valid + private Broker broker = new Broker(); + + public BigInteger getRouteId() { + return this.routeId; + } + + public void setRouteId(BigInteger routeId) { + this.routeId = routeId; + } + + public String getServiceName() { + return this.serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + public Map getTags() { + return this.tags; + } + + public void setTags(Map tags) { + this.tags = tags; + } + + public Map getCustomTags() { + return this.customTags; + } + + public void setCustomTags(Map customTags) { + this.customTags = customTags; + } + + public Broker getBroker() { + return this.broker; + } + + public void setBroker(Broker broker) { + this.broker = broker; + } + + @Override + public String toString() { + // @formatter:off + return new ToStringCreator(this) + .append("routeId", routeId) + .append("serviceName", serviceName) + .append("tags", tags) + .append("customTags", customTags) + .append("broker", broker) + .toString(); + // @formatter:on + } + + public enum ConnectionType { + + /** TCP RSocket connection. */ + TCP, + /** WEBSOCKET RSocket connection. */ + WEBSOCKET + + } + + public static class Broker { + + // FIXME: validate based on connectionType + private String host; + + private int port; + + @NotNull + private ConnectionType connectionType = ConnectionType.TCP; + + private URI wsUri; + + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return this.port; + } + + public void setPort(int port) { + this.port = port; + } + + public ConnectionType getConnectionType() { + return this.connectionType; + } + + public void setConnectionType(ConnectionType connectionType) { + this.connectionType = connectionType; + } + + public URI getWsUri() { + return this.wsUri; + } + + public void setWsUri(URI wsUri) { + this.wsUri = wsUri; + } + + @Override + public String toString() { + // @formatter:off + return new ToStringCreator(this) + .append("host", host) + .append("port", port) + .append("wsUri", wsUri) + .append("connectionType", connectionType) + .toString(); + // @formatter:on + } + + } + +} diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/GatewayRSocketClientAutoConfiguration.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/GatewayRSocketClientAutoConfiguration.java new file mode 100644 index 00000000..2d936e69 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/java/org/springframework/cloud/gateway/rsocket/client/GatewayRSocketClientAutoConfiguration.java @@ -0,0 +1,115 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.rsocket.client; + +import java.math.BigInteger; +import java.security.SecureRandom; +import java.util.function.Supplier; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; +import io.rsocket.RSocket; +import io.rsocket.micrometer.MicrometerRSocketInterceptor; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.rsocket.RSocketRequesterAutoConfiguration; +import org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.messaging.rsocket.RSocketRequester; +import org.springframework.messaging.rsocket.RSocketStrategies; +import org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; + +/** + * @author Spencer Gibb + */ +@Configuration +@ConditionalOnProperty(name = "spring.cloud.gateway.rsocket.enabled", + matchIfMissing = true) +@EnableConfigurationProperties +@ConditionalOnClass({ RSocket.class, RSocketRequester.class }) +@AutoConfigureAfter(RSocketStrategiesAutoConfiguration.class) +@AutoConfigureBefore(RSocketRequesterAutoConfiguration.class) +public class GatewayRSocketClientAutoConfiguration { + + /** + * Name of client id generator bean. + */ + public static final String RSOCKET_CLIENT_ID_GENERATOR_NAME = "rsocketClientIdGenerator"; + + private final RSocketMessageHandler messageHandler; + + private final SecureRandom secureRandom = new SecureRandom(); + + public GatewayRSocketClientAutoConfiguration(RSocketMessageHandler handler) { + messageHandler = handler; + } + + @Bean + @Scope("prototype") + @ConditionalOnMissingBean + public RSocketRequester.Builder gatewayRSocketRequesterBuilder( + RSocketStrategies strategies, ClientProperties properties, + MeterRegistry meterRegistry) { + RouteSetup.Builder routeSetup = RouteSetup.of(properties.getRouteId(), + properties.getServiceName()); + properties.getTags().forEach(routeSetup::with); + properties.getCustomTags().forEach(routeSetup::with); + + MicrometerRSocketInterceptor interceptor = new MicrometerRSocketInterceptor( + meterRegistry, Tag.of("servicename", properties.getServiceName())); + + return RSocketRequester.builder() + .setupMetadata(routeSetup.build(), RouteSetup.ROUTE_SETUP_MIME_TYPE) + .rsocketStrategies(strategies).rsocketFactory( + rsocketFactory -> rsocketFactory.addRequesterPlugin(interceptor) + .acceptor(messageHandler.responder())); + } + + @Bean + public BrokerClient brokerClient(RSocketRequester.Builder builder, + ClientProperties properties) { + return new BrokerClient(properties, builder); + } + + @Bean(name = RSOCKET_CLIENT_ID_GENERATOR_NAME) + @ConditionalOnMissingBean(name = RSOCKET_CLIENT_ID_GENERATOR_NAME) + public Supplier rsocketClientIdGenerator() { + return () -> { + byte[] bytes = new byte[16]; + secureRandom.nextBytes(bytes); + return new BigInteger(bytes); + }; + } + + @Bean + public ClientProperties clientProperties( + @Qualifier(RSOCKET_CLIENT_ID_GENERATOR_NAME) Supplier clientIdGenerator) { + ClientProperties clientProperties = new ClientProperties(); + clientProperties.setRouteId(clientIdGenerator.get()); + return clientProperties; + } + +} diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..63451731 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-client/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +# Auto Configure +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.springframework.cloud.gateway.rsocket.client.GatewayRSocketClientAutoConfiguration diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/pom.xml b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/pom.xml new file mode 100644 index 00000000..8edc4490 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/pom.xml @@ -0,0 +1,157 @@ + + + + + 4.0.0 + + org.springframework.cloud + spring-cloud-gateway-rsocket + 2.2.0.BUILD-SNAPSHOT + .. + + org.springframework.cloud + spring-cloud-gateway-rsocket-common + Spring Cloud Gateway RSocket Common + Spring Cloud Gateway RSocket Common + + + + org.springframework.boot + spring-boot-starter-rsocket + + + org.springframework.boot + spring-boot-configuration-processor + true + + + io.rsocket + rsocket-core + + + io.rsocket + rsocket-micrometer + + + io.rsocket + rsocket-transport-netty + + + io.micrometer + micrometer-core + + + org.roaringbitmap + RoaringBitmap + + + org.springframework.boot + spring-boot-starter-actuator + test + + + org.projectlombok + lombok + test + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + default-compile + none + + + + default-testCompile + none + + + java-compile + compile + + compile + + + + java-test-compile + test-compile + + testCompile + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + test-jar + + + + + + + + + java8plus + + [1.8,2.0) + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + -parameters + + + + + + + + + diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonAutoConfiguration.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonAutoConfiguration.java new file mode 100644 index 00000000..c41c15c5 --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonAutoConfiguration.java @@ -0,0 +1,51 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.rsocket.common.autoconfigure; + +import io.rsocket.RSocket; + +import org.springframework.boot.autoconfigure.AutoConfigureBefore; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.rsocket.RSocketStrategiesAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.rsocket.messaging.RSocketStrategiesCustomizer; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Spencer Gibb + */ +@Configuration +@ConditionalOnProperty(name = "spring.cloud.gateway.rsocket.enabled", + matchIfMissing = true) +@EnableConfigurationProperties +@ConditionalOnClass(RSocket.class) +@AutoConfigureBefore(RSocketStrategiesAutoConfiguration.class) +public class GatewayRSocketCommonAutoConfiguration { + + @Bean + public RSocketStrategiesCustomizer gatewayRSocketStrategiesCustomizer() { + return strategies -> { + strategies.decoder(new Forwarding.Decoder(), new RouteSetup.Decoder()) + .encoder(new Forwarding.Encoder(), new RouteSetup.Encoder()); + }; + } + +} diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonMetadataAutoConfiguration.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonMetadataAutoConfiguration.java new file mode 100644 index 00000000..0335265b --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/autoconfigure/GatewayRSocketCommonMetadataAutoConfiguration.java @@ -0,0 +1,69 @@ +/* + * Copyright 2013-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.rsocket.common.autoconfigure; + +import io.rsocket.RSocket; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding; +import org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.rsocket.DefaultMetadataExtractor; +import org.springframework.messaging.rsocket.MetadataExtractor; +import org.springframework.messaging.rsocket.RSocketStrategies; + +import static org.springframework.cloud.gateway.rsocket.common.metadata.Forwarding.FORWARDING_MIME_TYPE; +import static org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetup.ROUTE_SETUP_MIME_TYPE; + +/** + * @author Spencer Gibb + */ +@Configuration +@ConditionalOnProperty(name = "spring.cloud.gateway.rsocket.enabled", + matchIfMissing = true) +@EnableConfigurationProperties +@ConditionalOnClass(RSocket.class) +@AutoConfigureAfter({ GatewayRSocketCommonAutoConfiguration.class }) +public class GatewayRSocketCommonMetadataAutoConfiguration implements InitializingBean { + + private final ApplicationContext context; + + public GatewayRSocketCommonMetadataAutoConfiguration(ApplicationContext context) { + this.context = context; + } + + @Override + public void afterPropertiesSet() { + RSocketStrategies rSocketStrategies = this.context + .getBean(RSocketStrategies.class); + MetadataExtractor metadataExtractor = rSocketStrategies.metadataExtractor(); + // TODO: see if possible to make easier in framework. + if (metadataExtractor instanceof DefaultMetadataExtractor) { + DefaultMetadataExtractor extractor = (DefaultMetadataExtractor) metadataExtractor; + extractor.metadataToExtract(FORWARDING_MIME_TYPE, Forwarding.class, + Forwarding.METADATA_KEY); + extractor.metadataToExtract(ROUTE_SETUP_MIME_TYPE, RouteSetup.class, + RouteSetup.METADATA_KEY); + } + } + +} diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Forwarding.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Forwarding.java similarity index 95% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Forwarding.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Forwarding.java index f1ba6676..eb6fe107 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Forwarding.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Forwarding.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.math.BigInteger; import java.util.Map; @@ -36,8 +36,8 @@ import org.springframework.core.style.ToStringCreator; import org.springframework.util.Assert; import org.springframework.util.MimeType; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.ROUTE_ID; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.SERVICE_NAME; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.ROUTE_ID; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.SERVICE_NAME; // TODO: currently an ENVELOPE frame in RSocket extension, also discarding metadata public final class Forwarding extends TagsMetadata { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Metadata.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Metadata.java similarity index 93% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Metadata.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Metadata.java index 7f268529..db31f271 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/Metadata.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/Metadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import io.rsocket.metadata.WellKnownMimeType; diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetup.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetup.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetup.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetup.java index 6599344f..3563d364 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetup.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetup.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.math.BigInteger; import java.util.Map; @@ -81,7 +81,7 @@ public final class RouteSetup extends TagsMetadata { // @formatter:off TagsMetadata tagsMetadata = TagsMetadata.builder(this) .with(WellKnownKey.SERVICE_NAME, getServiceName()) - .with(WellKnownKey.ROUTE_ID, getId().toString()) + .with(WellKnownKey.ROUTE_ID, id == null ? null : getId().toString()) .build(); // @formatter:on diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadata.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadata.java similarity index 97% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadata.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadata.java index 45a08b88..116bdf44 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadata.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -35,8 +35,8 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.NettyDataBuffer; import org.springframework.util.Assert; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.ROUTE_ID; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.SERVICE_NAME; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.ROUTE_ID; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.SERVICE_NAME; public class TagsMetadata { diff --git a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/WellKnownKey.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/WellKnownKey.java similarity index 98% rename from spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/WellKnownKey.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/WellKnownKey.java index b303809b..e139f3ef 100644 --- a/spring-cloud-gateway-rsocket/src/main/java/org/springframework/cloud/gateway/rsocket/metadata/WellKnownKey.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/java/org/springframework/cloud/gateway/rsocket/common/metadata/WellKnownKey.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.util.Arrays; import java.util.HashMap; diff --git a/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/resources/META-INF/spring.factories b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/resources/META-INF/spring.factories new file mode 100644 index 00000000..530d8e7c --- /dev/null +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/main/resources/META-INF/spring.factories @@ -0,0 +1,4 @@ +# Auto Configure +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +org.springframework.cloud.gateway.rsocket.common.autoconfigure.GatewayRSocketCommonAutoConfiguration,\ +org.springframework.cloud.gateway.rsocket.common.autoconfigure.GatewayRSocketCommonMetadataAutoConfiguration diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingIntegrationTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingIntegrationTests.java similarity index 94% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingIntegrationTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingIntegrationTests.java index 72348d70..68d08138 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingIntegrationTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.util.Map; @@ -28,7 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.gateway.rsocket.test.MetadataEncoder; +import org.springframework.cloud.gateway.rsocket.common.test.MetadataEncoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.messaging.rsocket.RSocketStrategies; diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingTests.java similarity index 82% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingTests.java index 4b1c1dde..399bb425 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/ForwardingTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/ForwardingTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.math.BigInteger; import java.util.LinkedHashMap; @@ -22,12 +22,12 @@ import java.util.LinkedHashMap; import io.netty.buffer.ByteBuf; import org.junit.Test; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata.Key; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata.Key; import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetupTests.MAX_BIGINT; -import static org.springframework.cloud.gateway.rsocket.metadata.RouteSetupTests.TWO_BYTE_BIGINT; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.REGION; +import static org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetupTests.MAX_BIGINT; +import static org.springframework.cloud.gateway.rsocket.common.metadata.RouteSetupTests.TWO_BYTE_BIGINT; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.REGION; public class ForwardingTests { diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupIntegrationTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupIntegrationTests.java similarity index 94% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupIntegrationTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupIntegrationTests.java index 108b1027..02323024 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupIntegrationTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupIntegrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.util.Map; @@ -28,7 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.cloud.gateway.rsocket.test.MetadataEncoder; +import org.springframework.cloud.gateway.rsocket.common.test.MetadataEncoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.messaging.rsocket.MetadataExtractor; import org.springframework.messaging.rsocket.RSocketStrategies; diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupTests.java similarity index 92% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupTests.java index d57ecb46..fc29026a 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/RouteSetupTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/RouteSetupTests.java @@ -14,17 +14,17 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import java.math.BigInteger; import io.netty.buffer.ByteBuf; import org.junit.Test; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata.Key; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata.Key; import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.REGION; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.REGION; public class RouteSetupTests { diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadataTests.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadataTests.java similarity index 86% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadataTests.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadataTests.java index dcf7af18..e32fe29d 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/metadata/TagsMetadataTests.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/metadata/TagsMetadataTests.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.metadata; +package org.springframework.cloud.gateway.rsocket.common.metadata; import io.netty.buffer.ByteBuf; import org.junit.Test; -import org.springframework.cloud.gateway.rsocket.metadata.TagsMetadata.Key; +import org.springframework.cloud.gateway.rsocket.common.metadata.TagsMetadata.Key; import static org.assertj.core.api.Assertions.assertThat; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.ROUTE_ID; -import static org.springframework.cloud.gateway.rsocket.metadata.WellKnownKey.SERVICE_NAME; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.ROUTE_ID; +import static org.springframework.cloud.gateway.rsocket.common.metadata.WellKnownKey.SERVICE_NAME; public class TagsMetadataTests { diff --git a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/MetadataEncoder.java b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/test/MetadataEncoder.java similarity index 99% rename from spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/MetadataEncoder.java rename to spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/test/MetadataEncoder.java index b87632e9..1bffed2b 100644 --- a/spring-cloud-gateway-rsocket/src/test/java/org/springframework/cloud/gateway/rsocket/test/MetadataEncoder.java +++ b/spring-cloud-gateway-rsocket/spring-cloud-gateway-rsocket-common/src/test/java/org/springframework/cloud/gateway/rsocket/common/test/MetadataEncoder.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.cloud.gateway.rsocket.test; +package org.springframework.cloud.gateway.rsocket.common.test; import java.util.Collections; import java.util.LinkedHashMap; diff --git a/src/checkstyle/checkstyle-suppressions.xml b/src/checkstyle/checkstyle-suppressions.xml index a50235e9..5769f52a 100644 --- a/src/checkstyle/checkstyle-suppressions.xml +++ b/src/checkstyle/checkstyle-suppressions.xml @@ -28,4 +28,5 @@ + \ No newline at end of file