我们知道,配置管理,就是在·openfeign配置列表中点击+新建一个配置,然后在bootstrap.yaml拉取共享配置。
于是我们想到,路由是不是也可以这样?
其实是可以的。不过路由的变化,网关的路由配置全部是在项目启动时由org.springframework.cloud.gateway.route.CompositeRouteDefinitionLocator在项目启动的时候加载,并且一经加载就会缓存到内存中的路由表内(一个Map),所以不是仅仅热更新配置就够了,还要检测到路由配置变了后,去手动更行路由表。
如何监听Nacos配置变更?
先连接nacos,通过NacosFactory.createConfigService(properties);拿到configService。再通过addListener方法,就能再里面实现监听后需要进行的操作。
String serverAddr = "{serverAddr}"; String dataId = "{dataId}"; String group = "{group}"; // 1.创建ConfigService,连接Nacos Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); // 2.读取配置 String content = configService.getConfig(dataId, group, 5000); // 3.添加配置监听器 configService.addListener(dataId, group, new Listener() { @Override public void receiveConfigInfo(String configInfo) { // 配置变更的通知处理 System.out.println("recieve1:" + configInfo); } @Override public Executor getExecutor() { return null; } });如何把路由信息更新到路由表?
用到RouteDefinitionWriter里的两个方法
/** * 更新路由到路由表,如果路由id重复,则会覆盖旧的路由 */ Mono<Void> save(Mono<RouteDefinition> route); /** * 根据路由id删除某个路由 */ Mono<Void> delete(Mono<String> routeId);