-
编写配置类
java@Component public class NacosConfig { public static String GROUP_ID ; public static String DATA_ID ; @Value("${nacos.gateway.route.config.group}") public void setGroupId(String groupId){ GROUP_ID = groupId ; } @Value("${nacos.gateway.route.config.data-id}") public void setDataId(String dataId){ DATA_ID = dataId ; } } -
properties添加配置
propertiesnacos.gateway.route.config.group=DEFAULT_GROUP nacos.gateway.route.config.data-id=hello-gateway-router.json -
自定义RouteDefinitionLocator
java@Slf4j @Component public class NcosRouteDefinitionLocator implements RouteDefinitionLocator, InitializingBean { private volatile List<RouteDefinition> routeDefinitions = new CopyOnWriteArrayList<>() ; @Autowired private NacosConfigManager nacosConfigManager ; @Autowired private ObjectMapper objectMapper ; @Autowired private ApplicationEventPublisher eventPublisher ; private ConfigService configService ; @Override public Flux<RouteDefinition> getRouteDefinitions() { return Flux.fromIterable(routeDefinitions); } @Override public void afterPropertiesSet() throws Exception { // 从nacos获取routDefinition configService = nacosConfigManager.getConfigService(); // 读取配置并装载 this.initNacosConfig(); // 添加listener,当数据变化时接收通知 this.initNacosListener(); } private void initNacosConfig(){ try { String content = configService.getConfig( NacosConfig.DATA_ID, NacosConfig.GROUP_ID, 3000L ); CollectionType collectionType = objectMapper.getTypeFactory() .constructCollectionType(ArrayList.class, RouteDefinition.class); routeDefinitions = objectMapper.readValue(content, collectionType); }catch (NacosException e){ log.info("nacos config NacosException ", e); } catch (JsonProcessingException e) { log.info("nacos config JsonProcessingException ", e); } } private void initNacosListener() throws NacosException { configService.addListener( NacosConfig.DATA_ID, NacosConfig.GROUP_ID, new DataChangeListener()); } class DataChangeListener implements Listener{ @Override public Executor getExecutor() { return null; } @Override public void receiveConfigInfo(String content) { try { log.info("gateway config change : {}", content); CollectionType collectionType = objectMapper.getTypeFactory() .constructCollectionType(ArrayList.class, RouteDefinition.class); routeDefinitions = objectMapper.readValue(content, collectionType); // 当数据发生变化后发布刷新事件,通知CachingRouteLocator需要重新加载route定义 eventPublisher.publishEvent(new RefreshRoutesEvent(content)); }catch (JsonProcessingException e) { log.info("nacos config JsonProcessingException ", e); } } } } -
编写GatewayDynamicConfiguration配置类
java@Configuration public class GatewayDynamicConfiguration { @Bean @ConditionalOnProperty(value = "spring.cloud.gateway.dynamic.config.enable", matchIfMissing = true) public NacosRouteDefinitionLocator routeDefinitionLocator(){ return new NacosRouteDefinitionLocator() ; } }
SpringCloud-Gateway路由动态配置Nacos实现
yicj2023-10-03 17:42
相关推荐
30955666616 分钟前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数nice_lcj52019 分钟前
MySQL 存储引擎入门:InnoDB 和 MyISAM 到底怎么选文丑颜不良啊35 分钟前
LeetCode2861~2880题目解析装不满的克莱因瓶1 小时前
设计模式之策略模式核心概念和应用场景晴天的雨.9921 小时前
【C++】继承篇SomeOtherTime1 小时前
第 1 讲:内存布局与所有权解剖——栈帧、胖指针与“移动/拷贝”在汇编层面的真实面目qq_406981031 小时前
c++ lamda(三)Lambda表达式头发还在的女程序员1 小时前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案FYKJ_20101 小时前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计Flynn Liang2 小时前
LLM 应用安全:Prompt 注入、越权与输入输出护栏