Spring Cloud Gateway的動態路由怎樣作?集成Nacos實現很簡單

file

1、說明

網關的核心概念就是路由配置和路由規則,而做爲全部請求流量的入口,在實際生產環境中爲了保證高可靠和高可用,是儘可能要避免重啓的,因此實現動態路由是很是有必要的;本文主要介紹 Spring Cloud Gateway 實現的思路,而且以Nacos爲數據源來說解java

PS:關於 Spring Cloud Zuul 的動態路由請看文章《Spring Cloud Zuul的動態路由怎樣作?集成Nacos實現很簡單git

 

2、實現要點

要實現動態路由只需關注下面4個點github

  1. 網關啓動時,動態路由的數據怎樣加載進來
  2. 靜態路由動態路由以那個爲準,ps:靜態路由指的是配置文件裏寫死的路由配置
  3. 監聽動態路由的數據源變化
  4. 數據有變化時怎樣通知gateway刷新路由

 

3、具體實現

Spring Cloud Gateway 中加載路由信息分別由如下幾個類負責json

  1. PropertiesRouteDefinitionLocator:從配置文件中讀取路由信息(如YML、Properties等)
  2. RouteDefinitionRepository:從存儲器中讀取路由信息(如內存、配置中心、Redis、MySQL等)
  3. DiscoveryClientRouteDefinitionLocator:從註冊中心中讀取路由信息(如Nacos、Eurka、Zookeeper等)

  咱們能夠經過自定義 RouteDefinitionRepository 的實現類來實現動態路由的目的異步

 

3.1. 實現動態路由的數據加載

建立一個NacosRouteDefinitionRepository實現類分佈式

NacosRouteDefinitionRepository類可查看:NacosRouteDefinitionRepository.java 測試

file

重寫 getRouteDefinitions 方法實現路由信息的讀取spa

  配置Nacos監聽器,監聽路由配置信息的變化 .net

file

路由變化只須要往 ApplicationEventPublisher 推送一個 RefreshRoutesEvent 事件即刻,gateway會自動監聽該事件並調用 getRouteDefinitions 方法更新路由信息日誌

 

3.2. 建立配置類

DynamicRouteConfig類可查看:DynamicRouteConfig.java

file

 

3.3. 添加Nacos路由配置

file
新增配置項:

  • 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": []
	}
]
複製代碼

添加兩條路由數據

 

4、測試

啓動網關經過 /actuator/gateway/routes 端點查看當前路由信息

file

能夠看到 Nacos 裏配置的兩條路由信息

 

完整的Spring Cloud Gateway代碼請查看

gitee.com/zlt2000/mic…

 

推薦閱讀

  掃碼關注有驚喜!

file
相關文章
相關標籤/搜索