spring:
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
predicates:
- name: Path
args:
pattern: "'/api/' + serviceId + '/**'"
filters:
- name: RewritePath
args:
regexp: "'/api/' + serviceId + '/(?<remaining>.*)'"
replacement: "'/${remaining}'"
Previos zuul配置:
zuul.routes.xxx.service-id=xxx-service
zuul.routes.aaa-bbb.service-id=aaa-bbb-service
zuul.routes.aaa-bbb.path=/aaa/bbb/**
zuul.strip-prefix=true
zuul.prefix=/api
除了@rémi gélibert变体之外,我们还可以实现自己的routelocator。它允许您为您的路由选择和特殊过滤器指定谓词,能够根据您的意愿改变请求。
这样,我们可以将路由配置提取到某种application.properties
。
@Component
public class CustomRouteLocator implements RouteLocator {
Map<String, Pattern> prefixPatternsByServiceNames; // external configuration
Map<String, String> prefixesByServiceNames; // external configuration
Set<String> servicesNames; // external configuration
@Override
public Flux<Route> getRoutes() {
return Flux.fromIterable(servicesNames)
.map(serviceName -> Route.async()
.id("ROUTE_" + serviceName)
.predicate(exchange -> {
String path = exchange.getRequest().getPath().toString();
return prefixPatternsByServiceNames.get(serviceName).matcher(path).find();
})
.filter((exchange, chain) -> {
ServerHttpRequest origRequest = exchange.getRequest();
String query = origRequest.getURI().getQuery();
String originalPath = origRequest.getPath().toString();
String newPath = originalPath.substring(prefixesByServiceNames.get(serviceName).length());
ServerHttpRequest request = exchange.getRequest().mutate()
.path(query == null? newPath : newPath + "?" + query)
.build();
return chain.filter(exchange.mutate()
.request(request)
.build());
})
.uri("http://" + serviceName)
.build());
}
}
请注意:
我正在使用典型的Spring云堆栈对简单的微服务架构进行POC,但不是Eureka服务器,而是使用不工作的Spring云Kubernetes进行服务发现。 整个POC都在这里-https://github.com/dhananjay12/spring-microservices-using-spring-kubernetes 网关作为边缘服务器和2个下游服务-用户服务和联系我们服务。 k8设置在k
我一直在试图找到一个与eureka服务器集成的spring cloud gateway的运行示例,以及一些Hystrix示例,但到目前为止我还没有找到。有什么地方可以找到它吗?我真的很想看到spring cloud gateway投入使用,取代我目前的Zuul API服务。 谢谢!
我想自定义发现定位器行为。例如,我的例子之一是从路由到名为的服务。为此,我使用以下配置:
当我们部署到pcf时,Netflix eureka、zuul、ribbon、feign spring cloud配置不有用?(如果是,在pcf中有哪些可选方案以及如何配置它们?) 由于构建微服务遵循CI/CD方法,开发人员在推送代码之前如何验证其微服务的工作,因为我们在生产PCF中没有使用eureka、zuul、ribbon、feign。(如何在developer Machine中模拟pcf环境?
我们能在Spring Cloud API网关和没有服务发现的情况下生存吗?