【发布时间】:2019-09-23 18:02:36
【问题描述】:
我们正在使用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)。
问题是,即使是路线上的 order 属性似乎也不能解决这个问题;目前我们发现无法设置此路线的顺序/优先级。这是故意的吗?
【问题讨论】:
-
它们都是0序,这意味着它是随机的。下单了没有反映?你用的是什么版本?
-
嗨,Spencer,我尝试将第一个设置为 50,第二个设置为 0 - 然后它找不到
/yambas/rest/apps/bla/models/ms的任何路线
标签: java spring spring-boot spring-cloud spring-cloud-gateway