Adds s-c-netflix functionality back

This commit is contained in:
Spencer Gibb
2017-03-17 21:48:22 -06:00
parent 2ff093cadb
commit e3ffd321a9
14 changed files with 115 additions and 163 deletions

View File

@@ -37,7 +37,7 @@
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<optional>true</optional>
@@ -46,7 +46,7 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<optional>true</optional>
</dependency>-->
</dependency>
<!-- TODO: should be part of spring-cloud-starter-netflix -->
<dependency>
<groupId>io.reactivex</groupId>
@@ -62,11 +62,11 @@
<groupId>org.springframework</groupId>
<artifactId>spring-tuple</artifactId>
</dependency>
<!--<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<scope>test</scope>
</dependency>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>

View File

@@ -20,20 +20,19 @@ package org.springframework.cloud.gateway.config;
import java.util.List;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
// import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.gateway.actuate.GatewayEndpoint;
import org.springframework.cloud.gateway.api.RouteDefinitionLocator;
import org.springframework.cloud.gateway.api.RouteDefinitionRepository;
import org.springframework.cloud.gateway.api.RouteDefinitionWriter;
import org.springframework.cloud.gateway.api.RouteLocator;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
import org.springframework.cloud.gateway.filter.NettyRoutingFilter;
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
import org.springframework.cloud.gateway.filter.WriteResponseFilter;
@@ -47,12 +46,12 @@ import org.springframework.cloud.gateway.filter.factory.RemoveNonProxyHeadersWeb
import org.springframework.cloud.gateway.filter.factory.RemoveRequestHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.RemoveResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.RewritePathWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SecureHeadersWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.WebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SecureHeadersProperties;
import org.springframework.cloud.gateway.filter.factory.SecureHeadersWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetPathWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetResponseHeaderWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.SetStatusWebFilterFactory;
import org.springframework.cloud.gateway.filter.factory.WebFilterFactory;
import org.springframework.cloud.gateway.handler.FilteringWebHandler;
import org.springframework.cloud.gateway.handler.NettyRoutingWebHandler;
import org.springframework.cloud.gateway.handler.RequestPredicateHandlerMapping;
@@ -70,14 +69,14 @@ import org.springframework.cloud.gateway.handler.predicate.RequestPredicateFacto
import org.springframework.cloud.gateway.support.CachingRouteLocator;
import org.springframework.cloud.gateway.support.CompositeRouteDefinitionLocator;
import org.springframework.cloud.gateway.support.CompositeRouteLocator;
import org.springframework.cloud.gateway.support.RouteDefinitionRouteLocator;
import org.springframework.cloud.gateway.support.InMemoryRouteDefinitionRepository;
import org.springframework.cloud.gateway.support.RouteDefinitionRouteLocator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// import com.netflix.hystrix.HystrixObservableCommand;
import org.springframework.context.annotation.Primary;
import com.netflix.hystrix.HystrixObservableCommand;
import reactor.core.publisher.Flux;
import reactor.ipc.netty.http.client.HttpClient;
import rx.RxReactiveStreams;
@@ -89,6 +88,7 @@ import rx.RxReactiveStreams;
@ConditionalOnBean(GatewayConfiguration.Marker.class)
@EnableConfigurationProperties
@AutoConfigureBefore(HttpHandlerAutoConfiguration.class)
@AutoConfigureAfter(GatewayLoadBalancerClientAutoConfiguration.class)
public class GatewayAutoConfiguration {
@Configuration
@@ -173,16 +173,6 @@ public class GatewayAutoConfiguration {
// GlobalFilter beans
/*@ConditionalOnClass(LoadBalancerClient.class)
@Configuration
protected static class LoadBalancerClientConfiguration {
@Bean
@ConditionalOnBean(LoadBalancerClient.class)
public LoadBalancerClientFilter loadBalancerClientFilter(LoadBalancerClient client) {
return new LoadBalancerClientFilter(client);
}
}*/
@Bean
public RouteToRequestUrlFilter routeToRequestUrlFilter() {
return new RouteToRequestUrlFilter();
@@ -261,7 +251,7 @@ public class GatewayAutoConfiguration {
public AddResponseHeaderWebFilterFactory addResponseHeaderWebFilterFactory() {
return new AddResponseHeaderWebFilterFactory();
}
/* TODO: add it back when s-c-netflix is up to date
@Configuration
@ConditionalOnClass({HystrixObservableCommand.class, RxReactiveStreams.class})
protected static class HystrixConfiguration {
@@ -269,7 +259,7 @@ public class GatewayAutoConfiguration {
public HystrixWebFilterFactory hystrixWebFilterFactory() {
return new HystrixWebFilterFactory();
}
}*/
}
@Bean
public PrefixPathWebFilterFactory prefixPathWebFilterFactory() {

View File

@@ -0,0 +1,45 @@
/*
* Copyright 2013-2017 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
*
* http://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.config;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author Spencer Gibb
*/
@Configuration
@ConditionalOnClass({LoadBalancerClient.class, RibbonAutoConfiguration.class})
@ConditionalOnBean(GatewayConfiguration.Marker.class)
@AutoConfigureAfter(RibbonAutoConfiguration.class)
public class GatewayLoadBalancerClientAutoConfiguration {
// GlobalFilter beans
@Bean
@ConditionalOnBean(LoadBalancerClient.class)
public LoadBalancerClientFilter loadBalancerClientFilter(LoadBalancerClient client) {
return new LoadBalancerClientFilter(client);
}
}

View File

@@ -19,7 +19,7 @@ package org.springframework.cloud.gateway.discovery;
import java.net.URI;
// import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.gateway.api.RouteDefinitionLocator;
import org.springframework.cloud.gateway.filter.factory.RewritePathWebFilterFactory;
import org.springframework.cloud.gateway.handler.predicate.PathRequestPredicateFactory;
@@ -39,7 +39,7 @@ import reactor.core.publisher.Flux;
* TODO: developer configuration, in zuul, this was opt out, should be opt in
* @author Spencer Gibb
*/
public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitionLocator {
public class DiscoveryClientRouteDefinitionLocator implements RouteDefinitionLocator {
private final DiscoveryClient discoveryClient;
private final String routeIdPrefix;
@@ -57,50 +57,10 @@ public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitio
routeDefinition.setId(this.routeIdPrefix + serviceId);
routeDefinition.setUri(URI.create("lb://" + serviceId));
// add a predicate that matches the url at /serviceId*//**
PredicateDefinition predicate = new PredicateDefinition();
predicate.setName(normalizePredicateName(PathRequestPredicateFactory.class));
predicate.addArg(PATTERN_KEY, "/" + serviceId + "*//**");
routeDefinition.getPredicates().add(predicate);
//TODO: support for other default predicates
// add a filter that removes /serviceId by default
FilterDefinition filter = new FilterDefinition();
filter.setName(normalizeFilterName(RewritePathWebFilterFactory.class));
String regex = "/" + serviceId + "/(?<remaining>.*)";
String replacement = "/${remaining}";
filter.addArg(REGEXP_KEY, regex);
filter.addArg(REPLACEMENT_KEY, replacement);
routeDefinition.getFilters().add(filter);
//TODO: support for default filters
return routeDefinition;
});
}
}*/ /*implements RouteDefinitionLocator {
private final DiscoveryClient discoveryClient;
private final String routeIdPrefix;
public DiscoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient) {
this.discoveryClient = discoveryClient;
this.routeIdPrefix = this.discoveryClient.getClass().getSimpleName() + "_";
}
@Override
public Flux<RouteDefinition> getRouteDefinitions() {
return Flux.fromIterable(discoveryClient.getServices())
.map(serviceId -> {
RouteDefinition routeDefinition = new RouteDefinition();
routeDefinition.setId(this.routeIdPrefix + serviceId);
routeDefinition.setUri(URI.create("lb://" + serviceId));
// add a predicate that matches the url at /serviceId*//**
// add a predicate that matches the url at /serviceId*
PredicateDefinition predicate = new PredicateDefinition();
predicate.setName(normalizePredicateName(PathRequestPredicateFactory.class));
predicate.addArg(PATTERN_KEY, "/" + serviceId + "*//**");
predicate.addArg(PATTERN_KEY, "/" + serviceId + "*");
routeDefinition.getPredicates().add(predicate);
//TODO: support for other default predicates
@@ -119,4 +79,4 @@ public class DiscoveryClientRouteDefinitionLocator {}/*implements RouteDefinitio
return routeDefinition;
});
}
}*/
}

View File

@@ -21,8 +21,8 @@ import java.net.URI;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
// import org.springframework.cloud.client.ServiceInstance;
// import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.gateway.support.NotFoundException;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
@@ -42,11 +42,11 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
private static final Log log = LogFactory.getLog(LoadBalancerClientFilter.class);
public static final int LOAD_BALANCER_CLIENT_FILTER_ORDER = 10100;
/*private final LoadBalancerClient loadBalancer;
private final LoadBalancerClient loadBalancer;
public LoadBalancerClientFilter(LoadBalancerClient loadBalancer) {
this.loadBalancer = loadBalancer;
}*/
}
@Override
public int getOrder() {
@@ -55,7 +55,7 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
/*URI url = getAttribute(exchange, GATEWAY_REQUEST_URL_ATTR, URI.class);
URI url = getAttribute(exchange, GATEWAY_REQUEST_URL_ATTR, URI.class);
if (url == null || !url.getScheme().equals("lb")) {
return chain.filter(exchange);
}
@@ -74,7 +74,7 @@ public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
.build(true)
.toUri();
log.trace("LoadBalancerClientFilter url chosen: " + requestUrl);
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl);*/
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl);
return chain.filter(exchange);
}

View File

@@ -22,14 +22,14 @@ import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
// import com.netflix.hystrix.HystrixCommandGroupKey;
// import com.netflix.hystrix.HystrixCommandKey;
// import com.netflix.hystrix.HystrixObservableCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandKey;
import com.netflix.hystrix.HystrixObservableCommand;
import reactor.core.publisher.Mono;
// import rx.Observable;
import rx.Observable;
import rx.RxReactiveStreams;
// import rx.Subscription;
import rx.Subscription;
import java.util.Arrays;
import java.util.List;
@@ -37,7 +37,7 @@ import java.util.List;
/**
* @author Spencer Gibb
*/
public class HystrixWebFilterFactory {}/*implements WebFilterFactory {
public class HystrixWebFilterFactory implements WebFilterFactory {
@Override
public List<String> argNames() {
@@ -46,6 +46,7 @@ public class HystrixWebFilterFactory {}/*implements WebFilterFactory {
@Override
public WebFilter apply(Tuple args) {
//TODO: if no name is supplied, generate one from command id (useful for default filter)
final String commandName = args.getString(NAME_KEY);
final HystrixCommandGroupKey groupKey = HystrixCommandGroupKey.Factory.asKey(getClass().getSimpleName());
final HystrixCommandKey commandKey = HystrixCommandKey.Factory.asKey(commandName);
@@ -80,4 +81,4 @@ public class HystrixWebFilterFactory {}/*implements WebFilterFactory {
return RxReactiveStreams.toObservable(this.chain.filter(this.exchange));
}
}
}*/
}

View File

@@ -1,3 +1,4 @@
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.gateway.config.GatewayAutoConfiguration
org.springframework.cloud.gateway.config.GatewayAutoConfiguration,\
org.springframework.cloud.gateway.config.GatewayLoadBalancerClientAutoConfiguration

View File

@@ -17,6 +17,7 @@
package org.springframework.cloud.gateway.filter.factory;
import java.time.Duration;
import java.util.Map;
import org.junit.Test;
@@ -57,7 +58,7 @@ public class AddRequestHeaderWebFilterFactoryTests extends BaseWebClientTests {
assertThat(headers).containsEntry("X-Request-Foo", "Bar");
})
.expectComplete()
.verify(DURATION);
.verify(Duration.ofMinutes(10));
}
@EnableAutoConfiguration

View File

@@ -44,7 +44,7 @@ public class HystrixWebFilterFactoryTests extends BaseWebClientTests {
@Test
public void hystrixFilterWorks() {
/*Mono<ClientResponse> result = webClient.get()
Mono<ClientResponse> result = webClient.get()
.uri("/get")
.header("Host", "www.hystrixsuccess.org")
.exchange();
@@ -58,19 +58,19 @@ public class HystrixWebFilterFactoryTests extends BaseWebClientTests {
.isEqualTo("hystrix_success_test");
})
.expectComplete()
.verify(DURATION);*/
.verify(DURATION);
}
@Test
public void hystrixFilterTimesout() {
/*Mono<ClientResponse> result = webClient.get()
Mono<ClientResponse> result = webClient.get()
.uri("/delay/3")
.header("Host", "www.hystrixfailure.org")
.exchange();
StepVerifier.create(result)
.expectError() //TODO: can we get more specific as to the error?
.verify();*/
.verify();
}
@EnableAutoConfiguration

View File

@@ -24,7 +24,6 @@ import org.junit.runner.RunWith;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.test.BaseWebClientTests;
import org.springframework.context.annotation.Import;
import org.springframework.test.annotation.DirtiesContext;
@@ -60,7 +59,7 @@ public class RemoveNonProxyHeadersWebFilterFactoryTests extends BaseWebClientTes
.consumeNextWith(
response -> {
Map<String, Object> headers = getMap(response, "headers");
// for (String header : DEFAULT_HEADERS_TO_REMOVE) {
//FIXME for (String header : DEFAULT_HEADERS_TO_REMOVE) {
assertThat(headers).doesNotContainKey("Proxy-Authorization");
// }
})

View File

@@ -30,9 +30,9 @@ import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.model.Route;
// import org.springframework.cloud.netflix.ribbon.RibbonClient;
// import org.springframework.cloud.netflix.ribbon.RibbonClients;
// import org.springframework.cloud.netflix.ribbon.StaticServerList;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.StaticServerList;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
@@ -43,8 +43,8 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.server.ServerWebExchange;
// import com.netflix.loadbalancer.Server;
// import com.netflix.loadbalancer.ServerList;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_HANDLER_MAPPER_ATTR;
import static org.springframework.cloud.gateway.support.ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR;
@@ -77,10 +77,10 @@ public class BaseWebClientTests {
@RestController
@RequestMapping("/httpbin")
@Configuration
/*@RibbonClients({
@RibbonClients({
@RibbonClient(name = "testservice", configuration = TestRibbonConfig.class),
@RibbonClient(name = "myservice", configuration = TestRibbonConfig.class)
})*/
})
@EnableGateway
protected static class DefaultTestConfig {
@@ -177,10 +177,10 @@ public class BaseWebClientTests {
@LocalServerPort
protected int port = 0;
/*@Bean
@Bean
public ServerList<Server> ribbonServerList() {
return new StaticServerList<>(new Server("localhost", this.port));
}*/
}
}
}

View File

@@ -21,7 +21,6 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -126,7 +125,6 @@ public class GatewayIntegrationTests extends BaseWebClientTests {
}
@Test
@Ignore
public void loadBalancerFilterWorks() {
Mono<ClientResponse> result = webClient.get()
.uri("/get")
@@ -146,7 +144,6 @@ public class GatewayIntegrationTests extends BaseWebClientTests {
}
@Test
@Ignore
public void postWorks() {
Mono<Map> result = webClient.post()
.uri("/post")

View File

@@ -20,23 +20,14 @@ package org.springframework.cloud.gateway.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
// import org.springframework.cloud.client.discovery.DiscoveryClient;
// import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.gateway.EnableGateway;
import org.springframework.cloud.gateway.api.RouteDefinitionLocator;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.config.PropertiesRouteDefinitionLocator;
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
import org.springframework.cloud.gateway.support.CachingRouteDefinitionLocator;
import org.springframework.cloud.gateway.support.CompositeRouteDefinitionLocator;
import org.springframework.cloud.gateway.support.InMemoryRouteDefinitionRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import reactor.core.publisher.Flux;
@EnableGateway
@SpringBootConfiguration
@EnableAutoConfiguration
@@ -47,7 +38,7 @@ public class GatewayTestApplication {
then run this app with `--spring.profiles.active=discovery`
should be able to hit http://localhost:8008/configserver/foo/default a normal configserver api
*/
/*@Configuration
@Configuration
@EnableDiscoveryClient
@Profile("discovery")
protected static class GatewayDiscoveryConfiguration {
@@ -56,39 +47,6 @@ public class GatewayTestApplication {
public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator(DiscoveryClient discoveryClient) {
return new DiscoveryClientRouteDefinitionLocator(discoveryClient);
}
@Bean
public PropertiesRouteDefinitionLocator propertiesRouteLocator(GatewayProperties properties) {
return new PropertiesRouteDefinitionLocator(properties);
}
@Bean
@Primary
public RouteDefinitionLocator compositeRouteLocator(InMemoryRouteDefinitionRepository inMemoryRouteRepository,
DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator,
PropertiesRouteDefinitionLocator propertiesRouteLocator) {
Flux<RouteDefinitionLocator> flux = Flux.just(inMemoryRouteRepository, discoveryClientRouteLocator, propertiesRouteLocator);
return new CachingRouteDefinitionLocator(new CompositeRouteDefinitionLocator(flux));
}
}*/
@Configuration
@Profile("!discovery")
protected static class GatewayInMemoryConfiguration {
@Bean
public PropertiesRouteDefinitionLocator propertiesRouteLocator(GatewayProperties properties) {
return new PropertiesRouteDefinitionLocator(properties);
}
@Bean
@Primary
public RouteDefinitionLocator compositeRouteLocator(InMemoryRouteDefinitionRepository inMemoryRouteRepository,
PropertiesRouteDefinitionLocator propertiesRouteLocator) {
Flux<RouteDefinitionLocator> flux = Flux.just(inMemoryRouteRepository, propertiesRouteLocator);
CompositeRouteDefinitionLocator composite = new CompositeRouteDefinitionLocator(flux);
return new CachingRouteDefinitionLocator(composite);
}
}
public static void main(String[] args) {

View File

@@ -1,15 +1,15 @@
test:
hostport: httpbin.org:80
# hostport: localhost:5000
uri: http://${test.hostport}
# uri: lb://testservice
# uri: http://${test.hostport}
uri: lb://testservice
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Foo, Default-Bar
# - PrefixPath=/httpbin
- PrefixPath=/httpbin
# TODO: breakup configuration for individual tests (though some are reused)
routes:
@@ -59,20 +59,20 @@ spring:
- AddResponseHeader=X-Request-Foo, Bar
# =====================================
# - id: hystrix_failure_test
# uri: ${test.uri}
# predicates:
# - Host=**.hystrixfailure.org
# filters:
# - Hystrix=failcmd
- id: hystrix_failure_test
uri: ${test.uri}
predicates:
- Host=**.hystrixfailure.org
filters:
- Hystrix=failcmd
# =====================================
# - id: hystrix_success_test
# uri: ${test.uri}
# predicates:
# - Host=**.hystrixsuccess.org
# filters:
# - Hystrix=successcmd
- id: hystrix_success_test
uri: ${test.uri}
predicates:
- Host=**.hystrixsuccess.org
filters:
- Hystrix=successcmd
# =====================================
- id: load_balancer_client_test