我们正在使用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/*
时,应当使用第二路由(回退)。
问题是,即使是route的 order 属性似乎也不能解决这个问题;目前我们无法建立此路线的顺序/优先级。2这是意向吗?
2条答案
按热度按时间hs1ihplo1#
在路由配置中,更具体的路由应该首先出现,一般路由应该出现在最后。
例如:
http://gateway-url/v1/accounts/**
始终与route-id-1
匹配,而http://gateway-url/v1/**
与route-id-2
匹配35g0bw712#
看起来我们设置顺序的方式是错误的--将优先级较低的路由设置为顺序1,将优先级较高的路由设置为0,这样就可以正常工作。
@spencergibb,这绝对值得在文档中提及。