spring cloud gateway 基于注册中心的路由定位器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}'"

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值