詳解Spring Cloud Gateway基于服務發(fā)現(xiàn)的默認路由規(guī)則
1.Spring Gateway概述
1.1 什么是Spring Cloud Gateway
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技術(shù)開發(fā)的網(wǎng)關(guān),Spring Cloud Gateway旨在為微服務架構(gòu)提供一種簡單而有效的統(tǒng)一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態(tài)系中的網(wǎng)關(guān),目標是替代Netflix ZUUL,其不僅提供統(tǒng)一的路由方式,并且基于Filter鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/埋點,和限流等。

1.2 Spring Cloud Gateway的功能
Spring Cloud Gateway 的特征:
- 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- 動態(tài)路由
- Predicates 和 Filters 作用于特定路由
- 集成 Hystrix 斷路器
- 集成 Spring Cloud DiscoveryClient
- 易于編寫的 Predicates 和 Filters
- 限流
- 路徑重寫
2. Spring Cloud Gateway的工程流程

客戶端向 Spring Cloud Gateway 發(fā)出請求。然后在 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發(fā)送到 Gateway Web Handler。Handler 再通過指定的過濾器鏈來將請求發(fā)送到我們實際的服務執(zhí)行業(yè)務邏輯,然后返回。
過濾器之間用虛線分開是因為過濾器可能會在發(fā)送代理請求之前(“pre”)或之后(“post”)執(zhí)行業(yè)務邏輯。
2.1 Pre和POST兩種類型的過濾器
3.基于服務發(fā)現(xiàn)的默認路由規(guī)則
3.1 zuul和gateway的默認路由規(guī)則
3.1.1 zuul的默認路由規(guī)則
說明默認情況下,Zuul會代理所有注冊到Eureka Server的微服務,并且Zuul的路由規(guī)則如下:
http://ZUUL_HOST:ZUUL_PORT/微服務在Eureka上的serviceId/** 會被轉(zhuǎn)發(fā)到serviceId對應的微服務。
http://localhost:8040/sc-zuul-first-provider/sc/order/2

3.1.2 gateway的默認路由規(guī)則
規(guī)則:http://Gateway_HOST:Gateway_PORT/大寫的serviceId/**
其中微服務應用名默認大寫訪問。
實例代碼:
| 模塊 | 說明 | 端口 |
|---|---|---|
| eureka-service | Eureka Server注冊中心 | 5000 |
| gateway-service | Spring Cloud Gateway Sever | 5001 |
| order-service | 服務提供者 | 5100 |
| user-service | 服務消費者 | 5200 |
分別新建上面這四個服務,詳見 spring cloud Finchley環(huán)境搭建
其中g(shù)ateway-service服務的application.yml配置文件如下:
spring: application: name: gateway-service cloud: # spring cloud gateway 路由配置方式 gateway: discovery: #是否與服務發(fā)現(xiàn)組件進行結(jié)合,通過 serviceId(必須設置成大寫) 轉(zhuǎn)發(fā)到具體的服務實例。默認為false,設為true便開啟通過服務中心的自動根據(jù) serviceId 創(chuàng)建路由的功能。 locator: #路由訪問方式:http://Gateway_HOST:Gateway_PORT/大寫的serviceId/**,其中微服務應用名默認大寫訪問。 enabled: true routes: - id: 163 #網(wǎng)關(guān)路由到網(wǎng)易官網(wǎng) uri: http://www.163.com/ predicates: - Path=/163/** # - id: ORDER-SERVICE #網(wǎng)關(guān)路由到訂單服務order-service # uri: lb://ORDER-SERVICE # predicates: # - Path=/ORDER-SERVICE/** # - id: USER-SERVICE #網(wǎng)關(guān)路由到用戶服務user-service # uri: lb://USER-SERVICE # predicates: # - Pach=/USER-SERVICE/** server: port: 5001 logging: level: org.springframework.cloud.gateway: trace org.springframework.http.server.reactive: debug org.springframework.web.reactive: debug reactor.ipc.netty: debug eureka: client: service-url: defaultZone: http://localhost:5000/eureka/ feign: hystrix: enabled: true
配置項說明:
spring.cloud.gateway.discovery.locator.enabled:是否與服務發(fā)現(xiàn)組件進行結(jié)合,通過 serviceId 轉(zhuǎn)發(fā)到具體的服務實例。默認為false,設為true便開啟通過服務中心的自動根據(jù) serviceId 創(chuàng)建路由的功能。
eureka.client.service-url.defaultZone: http://localhost:5000/eureka/,指定注冊中心的地址,Spring Cloud Gateway從注冊中心獲取已經(jīng)注冊的服務列表。
logging.level.org.springframework.cloud.gateway: debug,開啟spring-Cloud-gateway的日志級別為debug,方便debug調(diào)試。
3.3 啟動測試
3.3.1 錯誤的路由規(guī)則訪問
訪問Spring Cloud Gateway對應的server,當訪問http://localhost:5000/order-service/order/getOrderPort的時候,會出現(xiàn)報錯內(nèi)容如下所示:

正確的Spring Cloud Gateway的默認路由規(guī)則:http://Gateway_HOST:Gateway_PORT/大寫的serviceId/**
3.3.2 Gateway正確的路由規(guī)則測試

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹詳解
- SpringCloud Gateway動態(tài)路由配置詳解
- 解決SpringCloud Gateway配置自定義路由404的坑
- Nacos+Spring Cloud Gateway動態(tài)路由配置實現(xiàn)步驟
- SpringCloud Gateway 路由配置定位原理分析
- springcloud gateway自定義斷言規(guī)則詳解,以后綴結(jié)尾進行路由
- Spring?cloud網(wǎng)關(guān)gateway進行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過程
相關(guān)文章
spring-boot中spring-boot-maven-plugin報紅錯誤及解決
這篇文章主要介紹了spring-boot中spring-boot-maven-plugin報紅錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
Java中BeanUtils.copyProperties的11個坑總結(jié)
我們?nèi)粘i_發(fā)中,經(jīng)常涉及到DO、DTO、VO對象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties,它會自動通過反射機制獲取源對象和目標對象的屬性,pyProperties,會有好幾個坑呢,本文將給大家總結(jié)一下遇到的坑,需要的朋友可以參考下2023-05-05
IDEA2022版本創(chuàng)建maven?web項目的兩種方式詳解
創(chuàng)建maven?web項目有兩種方式,一種是使用骨架方式,一種是不使用骨架的方式,本文結(jié)合實例代碼給大家介紹了IDEA2022版本創(chuàng)建maven?web項目的兩種方式,需要的朋友可以參考下2023-02-02
詳解Intellij IDEA 2017 debug斷點調(diào)試技巧(總結(jié))
這篇文章主要介紹了詳解Intellij IDEA 2017 debug斷點調(diào)試技巧(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

