请教一个 Spring Cloud Gateway 的问题 ,在已有路由规则下,怎么实现部分接口不走该路由规则?
问题如下:
我有一个需求,我所负责的是一个网关模块,由于历史原因,导致现在需要进行部分重构,将原有的网关替换成 Spring Cloud Gateway 。
主要是缩短链路,原有的链路:a-service -> b-service -> c-service
改变链路为:a-service -> c-service
新老接口都有统一的路径前缀:/proxy/${appName}/${serverName}
存在的问题:
- 由于需要尽快上线,老接口的路由规则不能改变也就是继续走 gateway-service -> otherGateway-service -> app-service,但是新接口就要走新链路 gateway-service -> app-service 。
- 这里我做了一个白名单,把旧的接口路径放到了白名单中。
- 我配置了路由规则为:
routes:
- id: app-service
uri: http://localhost
predicates:
- Path=/proxy/app/**
filters:
- StripPrefix=1
- 由于新老接口 uri 路径一致,我想通过白名单判断,如果在白名单中不使用路由规则,继续走老链路。如果不在白名单中就使用路由规则走新链路。
请问该怎么实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
其实呢,看了几遍,总感觉怪怪的,觉得题主描述的问题不是很清楚。就是解决题主最终的业务问题,和题主描述的解决方案不一定是最匹配的,比较想明白原始问题以及场景,没准也更好的解决办法
不过有一点我感觉可能看懂了,就是如果只是仅仅针对
spring cloud gateway
中predicate
的设置,以达到类似接口路径黑名单的路由效果(我觉得这里是黑名单才对吧,不是说在名单中就不使用路由规则么),倒是可以解决我们知道
predicates
下面配置的predicate
是并集的关系,新老接口uri
路径一致,所以只要在题主原来的路由配置中新增一个类似的黑名单predicate
就可以了只是
spring cloud gateway
中内置的predicate
好像没有找到上面的效果(当然没准是我没看到更多的PathRoutePredicateFactory
的用法)但是我们可以自定义一个
RoutePredicateFactory
,也是非常简单的,比如取名叫BlackListUriRoutePredicateFactory
里面核心一点就是这个逻辑啦
反正就是把配置的接口路径拿出来
contains
一把,因为是黑名单,所以前面加个!
然后配置的时候也很简单,按照自定义
RoutePredicateFactory
的要求做配置就可以了,类似下面这样。此时访问
/proxy/vcs/console_haha1
或者/proxy/vcs/console_haha2
将不会被路由规则匹配到至于题主说的什么链路选择,这也是我之前觉得怪的地方。。。如果后续还有补充再看看吧
2021-02-22更新补充
评论里题主有更新了问题,关键就是这里,现在题主的打算就是新网关架在老网关之前,然后依照新网关的配置做路由分流
这不就简单了么,也不用黑名单了,也不用写我那个自定义
Predicate
了,直接配置两个路由就可以了啊因为
spring cloud gateway
路由匹配机制本身就这样,满足Predicate
就能匹配order
,以防跑错这下应该满足了叭,不过这么看起来问题描述真的很关键哦