- 編寫配置類
@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添加配置
nacos.gateway.route.config.group=DEFAULT_GROUP nacos.gateway.route.config.data-id=hello-gateway-router.json
- 自定義RouteDefinitionLocator
@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,當(dāng)數(shù)據(jù)變化時(shí)接收通知 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); // 當(dāng)數(shù)據(jù)發(fā)生變化后發(fā)布刷新事件,通知CachingRouteLocator需要重新加載route定義 eventPublisher.publishEvent(new RefreshRoutesEvent(content)); }catch (JsonProcessingException e) { log.info("nacos config JsonProcessingException ", e); } } } }
- 編寫GatewayDynamicConfiguration配置類
@Configuration public class GatewayDynamicConfiguration { @Bean @ConditionalOnProperty(value = "spring.cloud.gateway.dynamic.config.enable", matchIfMissing = true) public NacosRouteDefinitionLocator routeDefinitionLocator(){ return new NacosRouteDefinitionLocator() ; } }
文章來源地址http://www.zghlxwxcb.cn/news/detail-728569.html
文章來源:http://www.zghlxwxcb.cn/news/detail-728569.html
到了這里,關(guān)于SpringCloud-Gateway路由動(dòng)態(tài)配置Nacos實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!