温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Cloud Gateway的动态路由及集成Nacos实现示例分析

发布时间:2021-12-18 14:47:58 来源:亿速云 阅读:255 作者:柒染 栏目:大数据

这篇文章将为大家详细讲解有关Spring Cloud Gateway的动态路由及集成Nacos实现示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

一、说明

网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的;下面主要介绍 Spring Cloud Gateway 实现的思路,并且以Nacos为数据源来讲解

二、实现要点

要实现动态路由只需关注下面4个点

  1. 网关启动时,动态路由的数据怎样加载进来

  2. 静态路由动态路由以那个为准,ps:静态路由指的是配置文件里写死的路由配置

  3. 监听动态路由的数据源变化

  4. 数据有变化时怎样通知gateway刷新路由

三、具体实现

Spring Cloud Gateway 中加载路由信息分别由以下几个类负责

  1. PropertiesRouteDefinitionLocator:从配置文件中读取路由信息(如YML、Properties等)

  2. RouteDefinitionRepository:从存储器中读取路由信息(如内存、配置中心、RedisMySQL等)

  3. DiscoveryClientRouteDefinitionLocator:从注册中心中读取路由信息(如Nacos、Eurka、Zookeeper等)

我们可以通过自定义 RouteDefinitionRepository 的实现类来实现动态路由的目的

3.1. 实现动态路由的数据加载

创建一个NacosRouteDefinitionRepository实现类

NacosRouteDefinitionRepository

Spring Cloud Gateway的动态路由及集成Nacos实现示例分析

重写 getRouteDefinitions 方法实现路由信息的读取

配置Nacos监听器,监听路由配置信息的变化Spring Cloud Gateway的动态路由及集成Nacos实现示例分析

路由变化只需要往 ApplicationEventPublisher 推送一个 RefreshRoutesEvent 事件即可,gateway会自动监听该事件并调用 getRouteDefinitions 方法更新路由信息

3.2. 创建配置类

DynamicRouteConfig

Spring Cloud Gateway的动态路由及集成Nacos实现示例分析

3.3. 添加Nacos路由配置

Spring Cloud Gateway的动态路由及集成Nacos实现示例分析新增配置项:

  • Data Id:scg-routes

  • Group:SCG_GATEWAY

  • 配置内容:

    [
      {      "id": "csdn",      "predicates": [{          "name": "Path",          "args": {                  "pattern": "/csdn/**"  }
          }],      "uri": "https://www.csdn.net/",      "filters": []
      },
      {      "id": "github",      "predicates": [{          "name": "Path",          "args": {                  "pattern": "/github/**"  }
          }],      "uri": "http://github.com/",      "filters": []
      }
    ]

     

    添加两条路由数据

四、测试

启动网关通过 /actuator/gateway/routes 端点查看当前路由信息

Spring Cloud Gateway的动态路由及集成Nacos实现示例分析

可以看到 Nacos 里配置的两条路由信息

关于Spring Cloud Gateway的动态路由及集成Nacos实现示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI