繁体   English   中英

Spring Cloud Gateway 中的路由顺序

[英]Route order in Spring Cloud Gateway

我们正在使用RouteDefinitionLocator的实现以编程方式实现路由。 我们有两个服务应该在同一路由路径上注册,如果另一个服务不存在,其中一个服务意味着作为后备。 具有特定路径的首选路由是:

RouteDefinition{id='CompositeDiscoveryClient_ms-1400133464', predicates=[PredicateDefinition{name='Path', args={pattern=/yambas/rest/apps/*/models/ms/**}}], filters=[FilterDefinition{name='RewritePath', args={regexp=/yambas/rest/apps/(?<remaining>.*), replacement=/ms/apps/${remaining}}}], uri=lb://ms, order=0}

还有更通用的,只有在找到其他路由时才会触发:

RouteDefinition{id='CompositeDiscoveryClient_yambas-1171178634', predicates=[PredicateDefinition{name='Path', args={pattern=/yambas/rest/**}}], filters=[], uri=lb://yambas, order=0}

因此,当调用/yambas/rest/apps/bla/models/ms ,应该使用第一个路由,当调用/yambas/rest/apps/bla/models/otherms/* ,应该使用第二个(fallback) .

问题是,即使路线上的订单属性似乎也无法解决这个问题; 目前我们发现无法设置此路线的顺序/优先级。 这是意向吗?

似乎我们以错误的方式设置了顺序 - 将较低优先级的路由设置为 1,将较高的路由设置为 0 使其工作。

@spencergibb 这绝对值得在文档中提及。

更具体的路由应该首先出现在路由配置中,一般的路由在最后。

例如:http://gateway-url/v1/accounts/** 总是匹配 route-id-1 而 http://gateway-url/v1/** 匹配 route-id-2

 spring: cloud: gateway: routes: - id: route-id-1 uri: http://www.someurl.com order: 0 predicates: - Path=/v1/accounts/** #<-- filters: - RewritePath=/v1/accounts/(?<segment>.*), /$\\{segment} - id: route-id-2 uri: http://www.someurl1.com order: 1 predicates: - Path=/v1/** #<-- filters: - RewritePath=/v1/(?<segment>.*), /$\\{segment}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM