網關的核心概念就是路由配置和路由規則,而做爲全部請求流量的入口,在實際生產環境中爲了保證高可靠和高可用,是儘可能要避免重啓的,因此實現動態路由是很是有必要的;本文主要介紹 Spring Cloud Gateway
實現的思路,而且以Nacos
爲數據源來說解java
PS:關於 Spring Cloud Zuul
的動態路由請看文章《Spring Cloud Zuul的動態路由怎樣作?集成Nacos實現很簡單》git
要實現動態路由只需關注下面4個點github
動態路由
的數據怎樣加載進來靜態路由
與動態路由
以那個爲準,ps:靜態路由
指的是配置文件裏寫死的路由配置動態路由
的數據源變化通知gateway
刷新路由
Spring Cloud Gateway
中加載路由信息分別由如下幾個類負責json
咱們能夠經過自定義 RouteDefinitionRepository
的實現類來實現動態路由的目的異步
建立一個Nacos
的RouteDefinitionRepository
實現類分佈式
NacosRouteDefinitionRepository類可查看:NacosRouteDefinitionRepository.java 測試
重寫
getRouteDefinitions
方法實現路由信息的讀取spa
配置Nacos監聽器,監聽路由配置信息的變化 .net
路由變化只須要往
ApplicationEventPublisher
推送一個RefreshRoutesEvent
事件即刻,gateway會自動監聽該事件並調用getRouteDefinitions
方法更新路由信息日誌
DynamicRouteConfig類可查看:DynamicRouteConfig.java
Nacos
路由配置[
{
"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
端點查看當前路由信息
能夠看到
Nacos
裏配置的兩條路由信息
完整的Spring Cloud Gateway代碼請查看
推薦閱讀
掃碼關注有驚喜!