spring-cloud动态路由“动态”的理解

本文探讨了Spring Cloud Gateway的动态路由实现,包括通过硬编码和YML配置的非动态方式,以及采用数据库和Redis的动态配置。重点介绍了动态路由接口RouteDefinitionRepository及其自定义实现,以及与之相关的事件监听器、HeartbeatEvent和RefreshRoutesEvent事件,揭示了动态更新路由信息的内部工作原理和线程机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非动态

众所周知,gateway配置最后会被封装成RouteDefinition

可以通过硬编码来配置路由

读取yml文件配置路由

@Configuration
public class DynamicRouteAutoConfiguration {
	/**
	 * 配置文件设置为空
	 * redis 加载为准
	 *
	 * @return
	 */
	@Bean
	public PropertiesRouteDefinitionLocator propertiesRouteDefinitionLocator() {
		return new PropertiesRouteDefinitionLocator(new GatewayProperties());
	}
}

但是这两种方式并不能动态的增删改路由信息,必须要改配置文件还要重启服务。。。

动态

即,数据库+缓存

动态路由接口RouteDefinitionRepository

RouteDefinitionRepository为路由定义定位器,动态路由入口都是基于此接口,内部是只有一个getRouteDefinitions方法
在这里插入图片描述

实现RouteDefinitionRepository接口自定义路由配置规则

RouteDefinitionRepository 通过继承自 RouteDefinitionLocatorRouteDefinitionWriter,封装了对路由定义信息的获取、增加、删除操作,在网关内置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 ->
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值