Move Route and deps to api.
Rename RouteReader to RouteLocator
This commit is contained in:
@@ -5,9 +5,9 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.springframework.cloud.gateway.api.CachingRouteReader;
|
import org.springframework.cloud.gateway.api.CachingRouteLocator;
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
||||||
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
|
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
|
||||||
@@ -30,15 +30,15 @@ import reactor.core.publisher.Mono;
|
|||||||
@RequestMapping("/admin/gateway")
|
@RequestMapping("/admin/gateway")
|
||||||
public class GatewayEndpoint {/*extends AbstractEndpoint<Map<String, Object>> {*/
|
public class GatewayEndpoint {/*extends AbstractEndpoint<Map<String, Object>> {*/
|
||||||
|
|
||||||
private RouteReader routeReader;
|
private RouteLocator routeLocator;
|
||||||
private List<GlobalFilter> globalFilters;
|
private List<GlobalFilter> globalFilters;
|
||||||
private List<RouteFilter> routeFilters;
|
private List<RouteFilter> routeFilters;
|
||||||
private FilteringWebHandler filteringWebHandler;
|
private FilteringWebHandler filteringWebHandler;
|
||||||
|
|
||||||
public GatewayEndpoint(RouteReader routeReader, List<GlobalFilter> globalFilters,
|
public GatewayEndpoint(RouteLocator routeLocator, List<GlobalFilter> globalFilters,
|
||||||
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler) {
|
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler) {
|
||||||
//super("gateway");
|
//super("gateway");
|
||||||
this.routeReader = routeReader;
|
this.routeLocator = routeLocator;
|
||||||
this.globalFilters = globalFilters;
|
this.globalFilters = globalFilters;
|
||||||
this.routeFilters = routeFilters;
|
this.routeFilters = routeFilters;
|
||||||
this.filteringWebHandler = filteringWebHandler;
|
this.filteringWebHandler = filteringWebHandler;
|
||||||
@@ -51,8 +51,8 @@ public class GatewayEndpoint {/*extends AbstractEndpoint<Map<String, Object>> {*
|
|||||||
//TODO: this should really be a listener that responds to a RefreshEvent
|
//TODO: this should really be a listener that responds to a RefreshEvent
|
||||||
@PostMapping("/refresh")
|
@PostMapping("/refresh")
|
||||||
public Flux<Route> refresh() {
|
public Flux<Route> refresh() {
|
||||||
if (this.routeReader instanceof CachingRouteReader) {
|
if (this.routeLocator instanceof CachingRouteLocator) {
|
||||||
return ((CachingRouteReader)this.routeReader).refresh();
|
return ((CachingRouteLocator)this.routeLocator).refresh();
|
||||||
}
|
}
|
||||||
return Flux.empty();
|
return Flux.empty();
|
||||||
}
|
}
|
||||||
@@ -84,19 +84,19 @@ public class GatewayEndpoint {/*extends AbstractEndpoint<Map<String, Object>> {*
|
|||||||
|
|
||||||
@GetMapping("/routes")
|
@GetMapping("/routes")
|
||||||
public Mono<List<Route>> routes() {
|
public Mono<List<Route>> routes() {
|
||||||
return this.routeReader.getRoutes().collectList();
|
return this.routeLocator.getRoutes().collectList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/routes/{id}")
|
@GetMapping("/routes/{id}")
|
||||||
public Mono<Route> route(@PathVariable String id) {
|
public Mono<Route> route(@PathVariable String id) {
|
||||||
return this.routeReader.getRoutes()
|
return this.routeLocator.getRoutes()
|
||||||
.filter(route -> route.getId().equals(id))
|
.filter(route -> route.getId().equals(id))
|
||||||
.singleOrEmpty();
|
.singleOrEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/routes/{id}/combinedfilters")
|
@GetMapping("/routes/{id}/combinedfilters")
|
||||||
public Map<String, Object> combinedfilters(@PathVariable String id) {
|
public Map<String, Object> combinedfilters(@PathVariable String id) {
|
||||||
Mono<Route> route = this.routeReader.getRoutes()
|
Mono<Route> route = this.routeLocator.getRoutes()
|
||||||
.filter(r -> r.getId().equals(id))
|
.filter(r -> r.getId().equals(id))
|
||||||
.singleOrEmpty();
|
.singleOrEmpty();
|
||||||
Optional<Route> optional = Optional.ofNullable(route.block()); //TODO: remove block();
|
Optional<Route> optional = Optional.ofNullable(route.block()); //TODO: remove block();
|
||||||
|
|||||||
@@ -3,19 +3,17 @@ package org.springframework.cloud.gateway.api;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Spencer Gibb
|
* @author Spencer Gibb
|
||||||
*/
|
*/
|
||||||
public class CachingRouteReader implements RouteReader {
|
public class CachingRouteLocator implements RouteLocator {
|
||||||
|
|
||||||
private final RouteReader delegate;
|
private final RouteLocator delegate;
|
||||||
private final AtomicReference<List<Route>> cachedRoutes = new AtomicReference<>();
|
private final AtomicReference<List<Route>> cachedRoutes = new AtomicReference<>();
|
||||||
|
|
||||||
public CachingRouteReader(RouteReader delegate) {
|
public CachingRouteLocator(RouteLocator delegate) {
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.cachedRoutes.compareAndSet(null, collectRoutes());
|
this.cachedRoutes.compareAndSet(null, collectRoutes());
|
||||||
}
|
}
|
||||||
@@ -31,7 +29,7 @@ public class CachingRouteReader implements RouteReader {
|
|||||||
*/
|
*/
|
||||||
public Flux<Route> refresh() {
|
public Flux<Route> refresh() {
|
||||||
return Flux.fromIterable(this.cachedRoutes.getAndUpdate(
|
return Flux.fromIterable(this.cachedRoutes.getAndUpdate(
|
||||||
routes -> CachingRouteReader.this.collectRoutes()));
|
routes -> CachingRouteLocator.this.collectRoutes()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Route> collectRoutes() {
|
private List<Route> collectRoutes() {
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package org.springframework.cloud.gateway.api;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Spencer Gibb
|
||||||
|
*/
|
||||||
|
public class CompositeRouteLocator implements RouteLocator {
|
||||||
|
|
||||||
|
private final Flux<RouteLocator> delegates;
|
||||||
|
|
||||||
|
public CompositeRouteLocator(Flux<RouteLocator> delegates) {
|
||||||
|
this.delegates = delegates;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Flux<Route> getRoutes() {
|
||||||
|
return this.delegates.flatMap(RouteLocator::getRoutes);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package org.springframework.cloud.gateway.api;
|
|
||||||
|
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Spencer Gibb
|
|
||||||
*/
|
|
||||||
public class CompositeRouteReader implements RouteReader {
|
|
||||||
|
|
||||||
private final Flux<RouteReader> delegates;
|
|
||||||
|
|
||||||
public CompositeRouteReader(Flux<RouteReader> delegates) {
|
|
||||||
this.delegates = delegates;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Flux<Route> getRoutes() {
|
|
||||||
return this.delegates.flatMap(RouteReader::getRoutes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.springframework.cloud.gateway.config;
|
package org.springframework.cloud.gateway.api;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.springframework.cloud.gateway.config;
|
package org.springframework.cloud.gateway.api;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package org.springframework.cloud.gateway.config;
|
package org.springframework.cloud.gateway.api;
|
||||||
|
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
import org.hibernate.validator.constraints.NotEmpty;
|
||||||
|
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
package org.springframework.cloud.gateway.api;
|
package org.springframework.cloud.gateway.api;
|
||||||
|
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Spencer Gibb
|
* @author Spencer Gibb
|
||||||
*/
|
*/
|
||||||
public interface RouteReader {
|
public interface RouteLocator {
|
||||||
|
|
||||||
Flux<Route> getRoutes();
|
Flux<Route> getRoutes();
|
||||||
}
|
}
|
||||||
@@ -10,8 +10,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
|
|||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
|
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
|
||||||
import org.springframework.cloud.gateway.actuate.GatewayEndpoint;
|
import org.springframework.cloud.gateway.actuate.GatewayEndpoint;
|
||||||
import org.springframework.cloud.gateway.api.CachingRouteReader;
|
import org.springframework.cloud.gateway.api.CachingRouteLocator;
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
|
import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
|
||||||
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
|
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
|
||||||
@@ -68,10 +68,10 @@ public class GatewayAutoConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnMissingBean(RouteReader.class)
|
@ConditionalOnMissingBean(RouteLocator.class)
|
||||||
public RouteReader propertiesRouteReader(GatewayProperties properties) {
|
public RouteLocator routeLocator(GatewayProperties properties) {
|
||||||
//TODO: how to automatically apply CachingRouteReader
|
//TODO: how to automatically apply CachingRouteLocator
|
||||||
return new CachingRouteReader(new PropertiesRouteReader(properties));
|
return new CachingRouteLocator(new PropertiesRouteLocator(properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@@ -94,8 +94,8 @@ public class GatewayAutoConfiguration {
|
|||||||
@Bean
|
@Bean
|
||||||
public RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler,
|
public RoutePredicateHandlerMapping routePredicateHandlerMapping(FilteringWebHandler webHandler,
|
||||||
Map<String, RoutePredicate> predicates,
|
Map<String, RoutePredicate> predicates,
|
||||||
RouteReader routeReader) {
|
RouteLocator routeLocator) {
|
||||||
return new RoutePredicateHandlerMapping(webHandler, predicates, routeReader);
|
return new RoutePredicateHandlerMapping(webHandler, predicates, routeLocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
// GlobalFilter beans
|
// GlobalFilter beans
|
||||||
@@ -238,9 +238,9 @@ public class GatewayAutoConfiguration {
|
|||||||
protected static class GatewayActuatorConfiguration {
|
protected static class GatewayActuatorConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public GatewayEndpoint gatewayEndpoint(RouteReader routeReader, List<GlobalFilter> globalFilters,
|
public GatewayEndpoint gatewayEndpoint(RouteLocator routeLocator, List<GlobalFilter> globalFilters,
|
||||||
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler) {
|
List<RouteFilter> routeFilters, FilteringWebHandler filteringWebHandler) {
|
||||||
return new GatewayEndpoint(routeReader, globalFilters, routeFilters, filteringWebHandler);
|
return new GatewayEndpoint(routeLocator, globalFilters, routeFilters, filteringWebHandler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
package org.springframework.cloud.gateway.config;
|
package org.springframework.cloud.gateway.config;
|
||||||
|
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Spencer Gibb
|
* @author Spencer Gibb
|
||||||
*/
|
*/
|
||||||
public class PropertiesRouteReader implements RouteReader {
|
public class PropertiesRouteLocator implements RouteLocator {
|
||||||
|
|
||||||
private final GatewayProperties properties;
|
private final GatewayProperties properties;
|
||||||
|
|
||||||
public PropertiesRouteReader(GatewayProperties properties) {
|
public PropertiesRouteLocator(GatewayProperties properties) {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package org.springframework.cloud.gateway.discovery;
|
package org.springframework.cloud.gateway.discovery;
|
||||||
|
|
||||||
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
import org.springframework.cloud.gateway.config.FilterDefinition;
|
import org.springframework.cloud.gateway.api.FilterDefinition;
|
||||||
import org.springframework.cloud.gateway.config.PredicateDefinition;
|
import org.springframework.cloud.gateway.api.PredicateDefinition;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
@@ -14,12 +14,12 @@ import java.net.URI;
|
|||||||
* TODO: developer configuration, in zuul, this was opt out, should be opt in
|
* TODO: developer configuration, in zuul, this was opt out, should be opt in
|
||||||
* @author Spencer Gibb
|
* @author Spencer Gibb
|
||||||
*/
|
*/
|
||||||
public class DiscoveryClientRouteReader implements RouteReader {
|
public class DiscoveryClientRouteLocator implements RouteLocator {
|
||||||
|
|
||||||
private final DiscoveryClient discoveryClient;
|
private final DiscoveryClient discoveryClient;
|
||||||
private final String routeIdPrefix;
|
private final String routeIdPrefix;
|
||||||
|
|
||||||
public DiscoveryClientRouteReader(DiscoveryClient discoveryClient) {
|
public DiscoveryClientRouteLocator(DiscoveryClient discoveryClient) {
|
||||||
this.discoveryClient = discoveryClient;
|
this.discoveryClient = discoveryClient;
|
||||||
this.routeIdPrefix = this.discoveryClient.getClass().getSimpleName() + "_";
|
this.routeIdPrefix = this.discoveryClient.getClass().getSimpleName() + "_";
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ import java.net.URI;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import org.springframework.web.server.WebFilterChain;
|
import org.springframework.web.server.WebFilterChain;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
import org.springframework.cloud.gateway.filter.route.RouteFilter;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
|
|||||||
@@ -7,16 +7,14 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.PredicateDefinition;
|
||||||
import org.springframework.cloud.gateway.config.PredicateDefinition;
|
|
||||||
import org.springframework.cloud.gateway.handler.predicate.RoutePredicate;
|
import org.springframework.cloud.gateway.handler.predicate.RoutePredicate;
|
||||||
import org.springframework.web.reactive.handler.AbstractHandlerMapping;
|
import org.springframework.web.reactive.handler.AbstractHandlerMapping;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import org.springframework.web.server.WebHandler;
|
import org.springframework.web.server.WebHandler;
|
||||||
|
|
||||||
import reactor.core.publisher.Flux;
|
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_HANDLER_MAPPER_ATTR;
|
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_HANDLER_MAPPER_ATTR;
|
||||||
@@ -28,13 +26,13 @@ import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.G
|
|||||||
public class RoutePredicateHandlerMapping extends AbstractHandlerMapping {
|
public class RoutePredicateHandlerMapping extends AbstractHandlerMapping {
|
||||||
|
|
||||||
private Map<String, RoutePredicate> predicates = new LinkedHashMap<>();
|
private Map<String, RoutePredicate> predicates = new LinkedHashMap<>();
|
||||||
private RouteReader routeReader;
|
private RouteLocator routeLocator;
|
||||||
private WebHandler webHandler;
|
private WebHandler webHandler;
|
||||||
|
|
||||||
public RoutePredicateHandlerMapping(WebHandler webHandler, Map<String, RoutePredicate> predicates,
|
public RoutePredicateHandlerMapping(WebHandler webHandler, Map<String, RoutePredicate> predicates,
|
||||||
RouteReader routeReader) {
|
RouteLocator routeLocator) {
|
||||||
this.webHandler = webHandler;
|
this.webHandler = webHandler;
|
||||||
this.routeReader = routeReader;
|
this.routeLocator = routeLocator;
|
||||||
|
|
||||||
predicates.forEach((name, factory) -> {
|
predicates.forEach((name, factory) -> {
|
||||||
String key = normalizeName(name);
|
String key = normalizeName(name);
|
||||||
@@ -95,7 +93,7 @@ public class RoutePredicateHandlerMapping extends AbstractHandlerMapping {
|
|||||||
|
|
||||||
|
|
||||||
protected Route lookupRoute(ServerWebExchange exchange) throws Exception {
|
protected Route lookupRoute(ServerWebExchange exchange) throws Exception {
|
||||||
List<Route> routes = this.routeReader.getRoutes().collectList().block(); //TODO: convert rest of class to Reactive
|
List<Route> routes = this.routeLocator.getRoutes().collectList().block(); //TODO: convert rest of class to Reactive
|
||||||
|
|
||||||
for (Route route : routes) {
|
for (Route route : routes) {
|
||||||
if (!route.getPredicates().isEmpty()) {
|
if (!route.getPredicates().isEmpty()) {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.springframework.boot.SpringBootConfiguration;
|
|||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
import org.springframework.boot.context.embedded.LocalServerPort;
|
import org.springframework.boot.context.embedded.LocalServerPort;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.cloud.gateway.config.Route;
|
import org.springframework.cloud.gateway.api.Route;
|
||||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
|
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ import org.springframework.boot.SpringBootConfiguration;
|
|||||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||||
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
import org.springframework.cloud.gateway.api.CachingRouteReader;
|
import org.springframework.cloud.gateway.api.CachingRouteLocator;
|
||||||
import org.springframework.cloud.gateway.api.CompositeRouteReader;
|
import org.springframework.cloud.gateway.api.CompositeRouteLocator;
|
||||||
import org.springframework.cloud.gateway.api.RouteReader;
|
import org.springframework.cloud.gateway.api.RouteLocator;
|
||||||
import org.springframework.cloud.gateway.config.GatewayProperties;
|
import org.springframework.cloud.gateway.config.GatewayProperties;
|
||||||
import org.springframework.cloud.gateway.config.PropertiesRouteReader;
|
import org.springframework.cloud.gateway.config.PropertiesRouteLocator;
|
||||||
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteReader;
|
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteLocator;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
@@ -33,22 +33,22 @@ public class GatewayTestApplication {
|
|||||||
protected static class GatewayDiscoveryConfiguration {
|
protected static class GatewayDiscoveryConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public DiscoveryClientRouteReader discoveryClientRouteReader(DiscoveryClient discoveryClient) {
|
public DiscoveryClientRouteLocator discoveryClientRouteLocator(DiscoveryClient discoveryClient) {
|
||||||
return new DiscoveryClientRouteReader(discoveryClient);
|
return new DiscoveryClientRouteLocator(discoveryClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public PropertiesRouteReader propertiesRouteReader(GatewayProperties properties) {
|
public PropertiesRouteLocator propertiesRouteLocator(GatewayProperties properties) {
|
||||||
return new PropertiesRouteReader(properties);
|
return new PropertiesRouteLocator(properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@Primary
|
@Primary
|
||||||
public RouteReader compositeRouteReader(DiscoveryClientRouteReader discoveryClientRouteReader,
|
public RouteLocator compositeRouteLocator(DiscoveryClientRouteLocator discoveryClientRouteLocator,
|
||||||
PropertiesRouteReader propertiesRouteReader) {
|
PropertiesRouteLocator propertiesRouteLocator) {
|
||||||
final Flux<RouteReader> flux = Flux.just(discoveryClientRouteReader, propertiesRouteReader);
|
final Flux<RouteLocator> flux = Flux.just(discoveryClientRouteLocator, propertiesRouteLocator);
|
||||||
final CompositeRouteReader composite = new CompositeRouteReader(flux);
|
final CompositeRouteLocator composite = new CompositeRouteLocator(flux);
|
||||||
return new CachingRouteReader(composite);
|
return new CachingRouteLocator(composite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user