SpringCloud-Gateway路由动态配置Nacos实现

这篇具有很好参考价值的文章主要介绍了SpringCloud-Gateway路由动态配置Nacos实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 编写配置类
    @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 ;
        }
    }
    
  2. properties添加配置
    nacos.gateway.route.config.group=DEFAULT_GROUP
    nacos.gateway.route.config.data-id=hello-gateway-router.json
    
  3. 自定义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,当数据变化时接收通知
            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);
                }
            }
        }
    }
    
  4. 编写GatewayDynamicConfiguration配置类
    @Configuration
    public class GatewayDynamicConfiguration {
        @Bean
        @ConditionalOnProperty(value = "spring.cloud.gateway.dynamic.config.enable", matchIfMissing = true)
        public NacosRouteDefinitionLocator routeDefinitionLocator(){
            return new NacosRouteDefinitionLocator() ;
        }
    }
    

文章来源地址https://www.toymoban.com/news/detail-728569.html

到了这里,关于SpringCloud-Gateway路由动态配置Nacos实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud-GateWay

    随着微服务架构的盛行,项目由原来的单体系统不断进行演变到现在的微服务,系统被拆分为合适粒度的多个服务,当面临多服务的调用,客户端(发送请求的一段)要如何去调用这么多的微服务呢?如果按照没有使用网关的方式去调用对于客户端是不是就需要知道每一个服

    2024年02月09日
    浏览(45)
  • springcloud-gateway简述

    目录 定义 网关工程对应pom文件 网关工程对应的bootstrap.yaml Nacos对应网关配置文件 测试 注意 Spring Cloud Gateway是一个反应式API网关,用于构建和管理微服务架构中的网关层。它通过一组过滤器(Filters)和路由(Routes)来处理传入的HTTP请求,允许开发人员定义复杂的请求处理逻

    2024年02月11日
    浏览(46)
  • springcloud-gateway-2-鉴权

    目录 一、跨域安全设置 二、GlobalFilter实现全局的过滤与拦截。 三、GatewayFilter单个服务过滤器 1、原理-官方内置过滤器 2、自定义过滤器-TokenAuthGatewayFilterFactory 3、完善TokenAuthGatewayFilterFactory的功能 4、每一个服务编写一个或多个过滤器,实现鉴权的需要 四、总结 续前篇,介

    2024年02月03日
    浏览(44)
  • SpringCloud-Gateway网关的使用

    本文介绍如何再 SpringCloud 项目中引入 Gateway 网关并完成网关服务的调用。Gateway 网关是一个在微服务架构中起到入口和路由控制的关键组件。它负责处理客户端请求,进行路由决策,并将请求转发到相应的微服务。Gateway 网关还可以实现负载均衡、安全认证、日志记录等功能

    2024年02月22日
    浏览(36)
  • SpringCloud-Gateway实现RSA加解密

    Gateway网关作为流量的入口,有的接口可能需要对请求内容加密,返回结果加密,保证数据安全性。 一、RSA介绍         RSA主要使用大整数分解这个数学难题进行设计,巧妙地利用了数论的概念。给了RSA公钥,首先想到的攻击就是分解模数,给了的因子攻击者可以计算得到

    2024年02月16日
    浏览(51)
  • springcloud-gateway升级版本allowedOrigins要改allowedOriginPatterns

    前言 报错: 原因:springboot升级2.6.0后所出现的问题 解决方法:将.allowedOrigins 替换成. allowedOriginPatterns 即可。 如下图: ps:这是2.3时代的配置,现在不叫这个了,要用:

    2024年02月22日
    浏览(46)
  • springcloud-gateway集成knife4j

    springcloud-gateway集成knife4j(swagger2) 环境信息 准备工作 微服务集成knife4j 第一步:编写Knife4jApiInfoProperties 第二步:编写配置类Knife4jConfig 第三步:放行相关资源 保证启动了knife4j 网关集成knife4j 编写配置类Knife4jGatewayConfig 测试验证 相关资料 spring-boot:2.6.3 spring-cloud-alibaba:2

    2023年04月09日
    浏览(40)
  • springcloud gateway动态路由

    动态每秒调用数据库,加载路由信息到路由定义(RouteDefinition)中 主要是继承  RouteDefinitionRepository接口: 如果项目没有自定义的RouteDefinitionRepository 则会加载InMemoryRouteDefinitionRepository 默认将加载的规则存放在内存,加载application.properties文件中配置的路由规则,InMemory加载内

    2024年02月02日
    浏览(37)
  • springCloud之Gateway动态路由

            学习gateway网关时,是以产品应用为目的,打算做一个类似于SAAS平台,网关负责统一的鉴权,日志记录,对外屏蔽真实的访问地址。路由信息也不能是写死在配置文件的,必须是提供管理页面可维护的。所以就略过配置文件,直接开启动态路由的实现。 一、gateway动态

    2024年02月08日
    浏览(39)
  • Gateway基于Nacos动态路由实现

    客户端请求,首先会被 Gateway Handler Mapping 处理,用以在  路由表  中查找一个与请求匹配的  路由 , 然后将请求交由  Web Handler  处理, Web Handler  维护了一个过滤器链,链式执行这些过滤器,这些过滤器在逻辑上存在两个执行阶段  pre   与  post   Nacos 致力于帮助您发现

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包