在之前我们了解的Spring Cloud Gateway配置路由方式有两种方式
1.通过配置文件
spring:
cloud:
gateway:
routes:
- id: test
predicates:
- Path=/ms/test/*
filters:
- StripPrefix=2
uri: http://localhost:9000
2.通过JavaBean
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/ms/test/**")
.filters(f -> f.stripPrefix(2))
.uri("http://localhost:9000"))
.build();
}
但是遗憾的是这两种方式都不支持动态路由,都需要重启服务。 所以我们需要对Spring Cloud Gateway进行改造,在改造的时候我们就需要看看源码了解下Spring Cloud Gateway的路由加载
路由的加载
我们之前分析了路由的加载主要在GatewayAutoConfiguration的 routeDefinitionRouteLocator方法加载的

实际上最终获取的路由信息都是在GatewayProperties这个配置类中

所以我们在动态路由的时候修改GatewayProperties中的属性即可,即
-
List<RouteDefinition> routes
-
List<FilterDefinition> defaultFilters
恰巧Spring Cloud Gateway也提供了相应的get、set方法

本文探讨了Spring Cloud Gateway的静态路由限制,并详细介绍了如何通过改造实现动态路由,涉及路由加载原理、GatewayProperties的修改以及CachingRouteLocator的缓存机制。文中提到了利用Apollo进行动态配置,并分享了相关代码参考,通过在Apollo中创建`route.yml`namespace,实现了动态路由的添加和删除,最后验证了动态路由的生效。
最低0.47元/天 解锁文章
3702

被折叠的 条评论
为什么被折叠?



