本章為入門理解
第二章上手demo:Nacos集成Spring Cloud Gateway使用第二章,上手demo 主要是新建一個springcloud項目 集成nacos為注冊中心,並且實現服務間的相互調用
第三章:Nacos集成Spring Cloud Gateway使用第三章:nacos配置中心 再第二章的基礎上 稍作改動 引用了nacos作為配置中心
1.什么是nacos
1.1Nacos原理

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處理程序。該處理程序通過特定於請求的過濾器鏈運行請求。
篩選器由虛線分隔的原因是,篩選器可以在發送代理請求之前和之后運行邏輯。所有“前置”過濾器邏輯均被執行。然后發出代理請求。發出代理請求后,將運行“后”過濾器邏輯。
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
