spring cloud gateway 基于注册中心的路由定位器DiscoveryClientRouteDefinitionLocator
看完前篇文章《gateway的基础知识点》我们知道了gateway一些相关的基础知识接下来我们要对这些基础知识进行梳理,我们看源码目录我们发现gateway实现的四个RouteDefinitionLocator分别散落在不同目录下,这个让我很不理解。那么这里有个最为特殊的DiscoveryClientRouteDefinitionLocator,因为他的所有信息均来源于注册中心,所...
·
看完前篇文章《gateway的基础知识点》我们知道了gateway一些相关的基础知识
接下来我们要对这些基础知识进行梳理,我们看源码目录
我们发现gateway实现的四个RouteDefinitionLocator分别散落在不同目录下,这个让我很不理解。
那么这里有个最为特殊的DiscoveryClientRouteDefinitionLocator,因为他的所有信息均来源于注册中心,所以这个spring默认集成了一个开关,也就是DiscoveryLocatorProperties 属性类中的enable属性,只需要配置这个属性就是开启了这个DiscoveryClientRouteDefinitionLocator
spring.cloud.gateway.discovery.locator.enabled=true
那么这个Locator中还可以设置哪些内容呢,让我们来看下源码
@ConfigurationProperties("spring.cloud.gateway.discovery.locator")
public class DiscoveryLocatorProperties {
/** 标志是否启用discoveryLocator */
private boolean enabled = false;
/**
* 路由id前缀,默认取 discoveryClient.getClass().getSimpleName()
* + "_". 服务id拼接成routeId
*/
private String routeIdPrefix;
/**
* 判断是否包含SpEL表达式
* 默认判断
*/
private String includeExpression = "true";
/**
* 路由的url的SpEl表达式, 默认为: 'lb://'+serviceId.
*/
private String urlExpression = "'lb://'+serviceId";
/**
* 是否在predicate和filter中将 serviceid 转成小写, 默认 false. Useful
* 在eureka中服务id是大写的像 MYSERIVCE, 将会匹配成如下形式
* /myservice/**
*/
private boolean lowerCaseServiceId = false;
//配置predicates
private List<PredicateDefinition> predicates = new ArrayList<>();
//配置过滤器
private List<FilterDefinition> filters = new ArrayList<>();
}
上面很清晰的将所有配置列出来了有了这份配置表我们就可以很轻松的对discoveryRouteDefinitonLocator进行更精细的配置了
以下配置请写在bootstrap.yml中,复杂的在properties中都不知道怎么写了,用转换工具转换后在properties中报错,启动无效。
spring.cloud.gateway.discovery.locator.predicates[0].name: Path
spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]: "'/'+serviceId+'/**'"
spring.cloud.gateway.discovery.locator.predicates[1].name: Host
spring.cloud.gateway.discovery.locator.predicates[1].args[pattern]: "'**.foo.com'"
spring.cloud.gateway.discovery.locator.filters[0].name: Hystrix
spring.cloud.gateway.discovery.locator.filters[0].args[name]: serviceId
spring.cloud.gateway.discovery.locator.filters[1].name: RewritePath
spring.cloud.gateway.discovery.locator.filters[1].args[regexp]: "'/' + serviceId + '/(?<remaining>.*)'"
spring.cloud.gateway.discovery.locator.filters[1].args[replacement]: "'/${remaining}'"
更多推荐
已为社区贡献2条内容
所有评论(0)