1. 程式人生 > >Spring Cloud Gateway的動態路由怎樣做?整合Nacos實現很簡單

Spring Cloud Gateway的動態路由怎樣做?整合Nacos實現很簡單

一、說明

閘道器的核心概念就是路由配置和路由規則,而作為所有請求流量的入口,在實際生產環境中為了保證高可靠和高可用,是儘量要避免重啟的,所以實現動態路由是非常有必要的;本文主要介紹 Spring Cloud Gateway 實現的思路,並且以Nacos為資料來源來講解

PS:關於 Spring Cloud Zuul 的動態路由請看文章《Spring Cloud Zuul的動態路由怎樣做?整合Nacos實現很簡單》

 

二、實現要點

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

  1. 閘道器啟動時,動態路由的資料怎樣載入進來
  2. 靜態路由動態路由以那個為準,ps:靜態路由指的是配置檔案裡寫死的路由配置
  3. 監聽動態路由的資料來源變化
  4. 資料有變化時怎樣通知gateway重新整理路由

 

三、具體實現

Spring Cloud Gateway 中載入路由資訊分別由以下幾個類負責

  1. PropertiesRouteDefinitionLocator:從配置檔案中讀取路由資訊(如YML、Properties等)
  2. RouteDefinitionRepository:從儲存器中讀取路由資訊(如記憶體、配置中心、Redis、MySQL等)
  3. DiscoveryClientRouteDefinitionLocator:從註冊中心中讀取路由資訊(如Nacos、Eurka、Zookeeper等)

 
我們可以通過自定義 RouteDefinitionRepository

的實現類來實現動態路由的目的

 

3.1. 實現動態路由的資料載入

建立一個NacosRouteDefinitionRepository實現類

NacosRouteDefinitionRepository類可檢視:NacosRouteDefinitionRepository.java

重寫 getRouteDefinitions 方法實現路由資訊的讀取

 
配置Nacos監聽器,監聽路由配置資訊的變化

路由變化只需要往 ApplicationEventPublisher 推送一個 RefreshRoutesEvent 事件即刻,gateway會自動監聽該事件並呼叫 getRouteDefinitions

方法更新路由資訊

 

3.2. 建立配置類

DynamicRouteConfig類可檢視:DynamicRouteConfig.java

 

3.3. 新增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 端點檢視當前路由資訊

可以看到 Nacos 裡配置的兩條路由資訊

 
完整的Spring Cloud Gateway程式碼請檢視
https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-gateway/sc-gateway

 

推薦閱讀

  • 日誌排查問題困難?分散式日誌鏈路跟蹤來幫你
  • zuul整合Sentinel最新的閘道器流控元件
  • Spring Cloud Zuul的動態路由怎樣做?整合Nacos實現很簡單
  • Spring Cloud開發人員如何解決服務衝突和例項亂竄?
  • Spring Cloud同步場景分散式事務怎樣做?試試Seata
  • Spring Cloud非同步場景分散式事務怎樣做?試試RocketMQ

 
掃碼關注有驚喜!

相關推薦

Spring Cloud Gateway動態路由怎樣整合Nacos實現簡單

一、說明 閘道器的核心概念就是路由配置和路由規則,而作為所有請求流量的入口,在實際生產環境中為了保證高可靠和高可用,是儘量要避免重啟的,所以實現動態路由是非常有必要的;本文主要介紹 Spring Cloud Gateway 實現的思路,並且以Nacos為資料來源來講解 PS:關於 Spring Cloud

Spring Cloud Zuul的動態路由怎樣整合Nacos實現簡單

一、說明 閘道器的核心概念就是路由配置和路由規則,而作為所有請求流量的入口,在實際生產環境中為了保證高可靠和高可用,是儘量要避免重啟的,所以實現動態路由是非常有必要的;本文主要介紹實現的思路,並且以Nacos為資料來源來講解   二、實現要點 要實現動態路由只需關注下面4個點 閘道器啟動時,動態路

Nacos+Spring Cloud Gateway動態路由配置

前言   Nacos最近專案一直在使用,其簡單靈活,支援更細粒度的命令空間,分組等為麻煩複雜的環境切換提供了方便;同時也很好支援動態路由的配置,只需要簡單的幾步即可。在國產的註冊中心、配置中心中比較突出,容易上手,本文通過gateway、nacos-consumer、nacos-provider三個簡單模組

拓展spring cloud gateway 動態路由解析及302問題

開發十年,就只剩下這套架構體系了! >>>   

spring-cloud-gateway動態路由

# 概述 線上專案釋出一般有以下幾種方案: 1. 停機發布 2. 藍綠部署 3. 滾動部署 4. 灰度釋出 **停機發布** 這種釋出一般在夜裡或者進行大版本升級的時候釋出,因為需要停機,所以現在大家都在研究 `Devops` 方案。 **藍綠部署** 需要準備兩個相同的環境。一個環境新版本,一個環境

Spring Cloud —— Zuul 動態路由

推薦 Spring Boot/Cloud 視訊: 前言 Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。也有很多公司使用它來作為閘道器的重要組成部分,碰巧今年公司的架構組決定自研一個閘道器產品,集

Spring Cloud Gateway路由

本篇文章主要介紹了什麼是 Spring Cloud Gateway,並基於 Spring Cloud Gateway 的 Finchley.RC1 版本編寫一個 Spring Cloud Gateway 的入門案例,即基本代理的路由轉發配置。 概述 Spring

Spring Cloud----Zuul動態路由

轉至:http://blog.csdn.net/u013815546/article/details/68944039 前言 Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。也有很多公司使用它來作為閘道器

Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現

什麽 docs -c 構建 .project per releases 會有 gist 自Spring Cloud Alibaba發布第一個Release以來,就備受國內開發者的高度關註。雖然Spring Cloud Alibaba還沒能納入Spring Cloud的主版本

Spring Cloud gateway 六 Sentinel nacos儲存動態重新整理

微服務當前這麼火爆的程度,如果不能學會一種微服務框架技術。怎麼能升職加薪,增加簡歷的籌碼?spring cloud 和 Dubbo 需要單獨學習。說沒有時間?沒有精力?要學倆個框架?而Spring Cloud alibaba只需要你學會一個就會擁有倆種微服務治理框架技術。何樂而不為呢?加油吧!騷猿年 ###

Spring Cloud Gateway 資料庫儲存路由資訊的擴充套件方案

動態路由背景 ​ 無論你在使用Zuul還是Spring Cloud Gateway 的時候,官方文件提供的方案總是基於配置檔案配置的方式 例如: # zuul 的配置形式 routes: pig-auth: path: /auth/** serviceId: pi

Spring Cloud Gateway整合Swagger聚合微服務系統API文件(非Zuul)

最近在學習SpringBoot2和Spring Cloud.Finchley版,網上資料也是少的可憐,大部分還是通過一些github或者碼雲上的一些開源框架來學習,途中出現的一些bug也只能自己看看原始碼嘗試解決。最近使用Spring Cloud Gateway替換Zuul

spring cloud gateway oauth 整合

zed webex access stub cat bject ret class http https://gitee.com/owenwangwen/open-capacity-platform/tree/master/new-api-gateway package c

Spring Cloud Gateway 擴充套件支援動態限流

之前分享過 一篇 《Spring Cloud Gateway 原生的介面限流該怎麼玩》, 核心是依賴Spring Cloud G

Spring Cloud gateway 五 Sentinel整合

微服務當前這麼火爆的程度,如果不能學會一種微服務框架技術。怎麼能升職加薪,增加簡歷的籌碼?spring cloud 和 Dubbo 需要單獨學習。說沒有時間?沒有精力?要學倆個框架?而Spring Cloud alibaba只需要你學會一個就會擁有倆種微服務治理框架技術。何樂而不為呢?加油吧!騷猿年 Sent

Spring Cloud Gateway+Nacos,yml+properties兩種配置檔案方式搭建閘道器服務

寫在前面 閘道器的作用不在此贅述,舉個最常用的例子,我們搭建了微服務,前端呼叫各服務介面時,由於各服務介面不一樣,如果讓前端同事分別呼叫,前端同事會瘋的。而閘道器就可以解決這個問題,閘道器遮蔽了各業務服務的埠,對前端同事來說,他們只負責呼叫閘道器服務埠下的服務就可以了。本文簡單描述如何使用Spring Clo

Dubbo想要個閘道器怎麼辦?試試整合Spring Cloud Gateway

![mark](https://img2020.cnblogs.com/other/1769816/202006/1769816-20200628094613340-740080500.png) ## 一、背景 在微服務架構中 **API閘道器** 非常重要,閘道器作為全域性流量入口並不單單是一個反向路由,更

搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway專案

### 前言     伴隨著隨著微服務概念的不斷盛行,與之對應的各種解決方案也層出不窮。這畢竟是一個資訊大爆發的時代,各種程式語言大行其道,各有各的優勢。但是有一點未曾改變,那就是他們服務的方式,工作的時候各司其職,但是需要提供服務的時候必須要高度統一,這也是微服務的概

Spring Cloud實戰 | 最終篇:Spring Cloud Gateway+Spring Security OAuth2整合統一認證授權平臺下實現登出使JWT失效方案

# 一. 前言 在上一篇文章介紹 [youlai-mall](https://github.com/hxrui/youlai-mall) 專案中,通過整合Spring Cloud Gateway、Spring Security OAuth2、JWT等技術實現了微服務下統一認證授權平臺的搭建。最後在文末留下一

(一)Spring Cloud— 子項目、未來 整合介紹

springcloud 電子商務 子項目 雲架構 微服務 Spring Cloud是一系列框架的有序集合。利用Spring Boot的開發模式簡化了分布式系統基礎設施的開發,如服務發現、註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等(這裏只簡單的列了一部分),都可以用Spring