Adds s-c-netflix functionality back
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
// }
|
||||
})
|
||||
|
||||
@@ -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));
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user