最近在做业务网关的时候,发现用RouteLocatorBuilder构建的Route无法操作删除和更新操作,又换回了RouteDefinition的构建方式,梳理下这里面的坑。
Route不能删除
查看GatewayControllerEndpoint可以看到有这个删除的方法:
1 | ("/routes/{id}") |
但是他只针对RouteDefinition方式构建的Route, 因为它会调用delete()这个在RouteDefinitionWriter接口中的方法,具体实现是在InMemoryRouteDefinitionRepository中,我们看最开始:
1 | public class InMemoryRouteDefinitionRepository implements RouteDefinitionRepository { |
直接就是一个带RouteDefinition的Map,这也都是save()存进来的KV,可以很清楚的看到Key就是他的Id,然后对应着本身。所以删除的时候直接删除这一KV,然后再去publisher一下就行了。
反而Route就没有这好事,所以我不得不先放弃了这个,但是也提了issues #675, 看看官方怎么说吧。
Factory不能实现Ordered
本想着构建Factory的时候,像普通的GlobalFilter或者GatewayFilter直接实现一个Ordered就能给他一个特定的优先级了。也不用改之前其他Filters定义好的优先级,但是不行啊!
我先给了个优先级,从官方给的EndPoint可以查看到:

但是这个设置了是不起作用的!只能debug看看了,进入到任意一个GlobalFilter,查看GatewayFilterChain的filters这一项,可以看到他的order是1!所以要改变的话,只要把应该在他后面的改的值比他大就行了。

结束!🔚
