Nacos集成Spring Cloud Gateway使用第一章:理解解釋


本章為入門理解

第二章上手demo:Nacos集成Spring Cloud Gateway使用第二章,上手demo 主要是新建一個springcloud項目 集成nacos為注冊中心,並且實現服務間的相互調用

第三章:Nacos集成Spring Cloud Gateway使用第三章:nacos配置中心 再第二章的基礎上 稍作改動 引用了nacos作為配置中心

1.什么是nacos

  Nacos 支持基於 DNS 和基於 RPC 的服務發現(可以作為springcloud的注冊中心)、動態配置服務(可以做配置中心)、動態 DNS 服務。

   1.1Nacos原理

  Nacos注冊中心分為server與client,server采用Java編寫,為client提供注冊發現服務與配置服務。而client可以用多語言實現,client與微服務嵌套在一起,nacos提供sdk和openApi,如果沒有sdk也可以根據openApi手動寫服務注冊與發現和配置拉取的邏輯

  1.2注冊中心原理:

  服務注冊方法:以Java nacos client v1.0.1 為例子,服務注冊的策略的是每5秒向nacos server發送一次心跳,心跳帶上了服務名,服務ip,服務端口等信息。同時 nacos server也會向client 主動發起健康檢查,支持tcp/http檢查。如果15秒內無心跳且健康檢查失敗則認為實例不健康,如果30秒內健康檢查失敗則剔除實例

  1.3配置中心原理

 

 2.什么是springcloud gateway

  2.1解釋 前提

  Spring Cloud Gateway是Spring官方基於Spring 5.0,Spring Boot 2.0和Project Reactor等技術開發的網關,Spring Cloud Gateway旨在為微服務架構提供一種簡單而有效的統一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態系中的網關,目標是替代ZUUL。

  Spring Cloud Gateway 是 Spring Cloud 新推出的網關框架,之前是 Netflix Zuul。網關通常在項目中為了簡化 前端的調用邏輯,同時也簡化內部服務之間互相調用的復雜度;具體作用就是轉發服務,接收並轉發所有內外部的客戶端調用;其他常見的功能還有權限認證,限流控制等等。

  2.2理解

  • Route: 【路由】 這個是網關的基本構成,由id,目標uri,一組斷言,和一組和過濾器的定義,如果斷言為真,則路由匹配
  • Predicate: 【斷言】 輸入類型是一個serverWebExchange ,我們可以使用它來自http請求的任何內容,比如headers等一些參數
  • Filter: 【過濾器】 gateway 中的fliter 分為兩種類型的filter,分別是agteway filter和global filter 過濾器的filter將會對請求和相應進行修改處理

  過程:客戶端向Spring Cloud Gateway發出請求。如果網關處理程序映射確定請求與路由匹配,則將其發送到網關Web處理程序。該處理程序通過特定於請求的過濾器鏈運行請求。

篩選器由虛線分隔的原因是,篩選器可以在發送代理請求之前和之后運行邏輯。所有“前置”過濾器邏輯均被執行。然后發出代理請求。發出代理請求后,將運行“后”過濾器邏輯。

  說白了 Predicate 就是為了實現一組匹配規則,方便讓請求過來找到對應的 Route 進行處理

 springboot.application.yml的gateway配置
gateway:
  routes:
  #自定義服務id
    - id: test
   #下面驗證通過會跳轉的地址,如果加上 lb + 服務名 uri以lb://開頭(lb代表從注冊中心獲取服務),后面接的就是你需要轉發到的服務名稱
      #uri: http://www.baidu.com
    uri: lb://serverone
      predicates:
        # 通過請求 ip 地址進行匹配  設置某個 ip 區間號段的請求才會路由
        #- RemoteAddr=192.168.1.1/24
        # Predicate 支持設置一個時間,在請求進行轉發的時候,可以通過判斷在這個時間之前或者之后進行轉發
        #- After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
        # 這個和上面那個剛好相反
        #- Before=2018-01-20T06:06:06+08:00[Asia/Shanghai]
        #時間段
        #- Between=2018-01-20T06:06:06+08:00[Asia/Shanghai], 2019-01-20T06:06:06+08:00[Asia/Shanghai]
        #通過cookie進行匹配,Cookie Route Predicate 可以接收兩個參數,一個是 Cookie name , 一個是正則表達式,如果匹配上就會執行路由,如果沒有匹配上則不執行。
          #使用 curl 測試,命令行輸入: curl http://localhost:8080 --cookie "ityouknow=kee.e"
        #- Cookie=ityouknow, kee.e
        #Header Route Predicate和上面那條一樣,也是可以接收兩種方式
          #使用 curl 測試,命令行輸入 curl http://localhost:8080  -H "X-Request-Id:666666" 如果后面不對的話會報錯404
        #- Header=X-Request-Id, \d+
        # 接收一組參數,一組匹配的域名列表 測試:curl http://localhost:8080  -H "Host: www.ityouknow.com"
        #- Host=**.ityouknow.com
        #通過請求方式匹配  POST、GET、PUT、DELETE 等不同的請求方式來進行路由  測試:curl http://localhost:8080
        #- Method=GET
        #通過請求路徑匹配 接收一個匹配路徑的參數來判斷是否走路由。  測試:curl http://localhost:8080/foo/1
        #- Path=/foo/{segment}
        #通過請求參數匹配 {一個屬性名 一個屬性值} 屬性值可以為正則表達式,如下面這個,只要請求匯總帶有 smile 參數即會匹配路由,不帶 smile 參數則不會匹配。
        #- Query=smile
          #Query 的值以鍵值對的方式進行配置,這樣在請求過來時會對屬性值和正則進行匹配,匹配上才會走路由。curl localhost:8080?keep=pub
        #- Query=keep, pu.
        #通過請求 ip 地址進行匹配,支持通過設置某個 ip 區間號段的請求才會路由 例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址,16 是子網掩碼)。
        #- RemoteAddr=192.168.1.1/24

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM