spring-cloud动态路由“动态”的理解
非动态
众所周知,gateway配置最后会被封装成RouteDefinition
。
可以通过硬编码来配置路由
略
读取yml文件配置路由
@Configuration
public class DynamicRouteAutoConfiguration {
/**
* 配置文件设置为空
* redis 加载为准
*
* @return
*/
@Bean
public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator() {
return new PropertiesRouteDefinitionLocator(new GatewayProperties());
}
}
但是这两种方式并不能动态的增删改路由信息,必须要改配置文件还要重启服务。。。
动态
即,数据库+缓存
动态路由接口RouteDefinitionRepository
RouteDefinitionRepository
为路由定义定位器,动态路由入口都是基于此接口,内部是只有一个getRouteDefinitions
方法
实现RouteDefinitionRepository接口自定义路由配置规则
RouteDefinitionRepository
通过继承自 RouteDefinitionLocator
、 RouteDefinitionWriter
,封装了对路由定义信息的获取、增加、删除操作,在网关内置API端点接口时会用到这些操作。
采用数据库+redis配置路由信息
自定义RedisRouteDefinitionWriter路由操作类
这里省略将数据库路由配置信息加载到redis的代码片段,直接看将redis中的路由信息加载到gateway服务中
@Slf4j
@Component
@AllArgsConstructor
public class RedisRouteDefinitionWriter implements RouteDefinitionRepository {
private final RedisTemplate redisTemplate;
@Override
public Mono<Void> save(Mono<RouteDefinition> route) {
return route.flatMap(r ->