国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹

zgbgx / 3658人閱讀

摘要:組合示例相同的也可以配置多個,請求的轉(zhuǎn)發(fā)是必須滿足所有的后才可以進行路由轉(zhuǎn)發(fā),組合使用示例如下所示總結(jié)本章節(jié)講解了的相關(guān)謂詞斷言基本使用方式,內(nèi)部提供了很多種靈活的路由轉(zhuǎn)發(fā)規(guī)則,在同一個路由內(nèi)存在多個時,同時滿足規(guī)則后請求才會被路由轉(zhuǎn)發(fā)。

Spring在因Netflix開源流產(chǎn)事件后,在不斷的更換Netflix相關(guān)的組件,比如:EurekaZuulFeignRibbon等,Zuul的替代產(chǎn)品就是SpringCloud Gateway,這是Spring團隊研發(fā)的網(wǎng)關(guān)組件,可以實現(xiàn)限流、安全認證、支持長連接等新特性。

Spring Cloud Gateway

Spring Cloud GatewaySpringCloud的全新子項目,該項目基于Spring5.xSpringBoot2.x技術(shù)版本進行編寫,意在提供簡單方便、可擴展的統(tǒng)一API路由管理方式。
概念解釋:

Route(路由):路由是網(wǎng)關(guān)的基本單元,由ID、URI、一組Predicate、一組Filter組成,根據(jù)Predicate進行匹配轉(zhuǎn)發(fā)。

Predicate(謂語、斷言):路由轉(zhuǎn)發(fā)的判斷條件,目前SpringCloud Gateway支持多種方式,常見如:PathQueryMethodHeader等。

Filter(過濾器):過濾器是路由轉(zhuǎn)發(fā)請求時所經(jīng)過的過濾邏輯,可用于修改請求、響應內(nèi)容。

Spring Cloud GateWay 工作流程如下所示

客戶端向Spring Cloud Gateway發(fā)出請求。如果網(wǎng)關(guān)處理程序映射確定請求與路由匹配,則將其發(fā)送到網(wǎng)關(guān)Web處理程序。此處理程序運行時通過特定于請求的篩選鏈發(fā)送請求。過濾器被虛線分隔的原因是過濾器可以在發(fā)送代理請求之前或之后執(zhí)行邏輯。執(zhí)行所有“預”過濾邏輯,然后發(fā)出代理請求。在發(fā)出代理請求后,將執(zhí)行“post”過濾器邏輯。

開始使用

Spring Cloud Gateway目前有兩種方式進行配置:

application.yml配置文件方式

通過@Bean注解RouteLocator方法返回值

在本章會側(cè)重針對配置文件方式進行講解,當然RouteLocator方式也會簡單的告訴大家的使用方式。

添加依賴

添加Spring Cloud Gateway相關(guān)依賴,pom.xml如下所示:

//...省略部分內(nèi)容

        1.8
        Greenwich.SR1
    

    
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
//...省略部分內(nèi)容
Spring Cloud Gateway Predicates

在我們開始本章內(nèi)容之前我們要來先了解下Spring Cloud Gateway內(nèi)部提供的所有謂語、斷言,這樣我們才能目標性的進行學習,我整理出來了一個腦圖,如下所示:

每一個Predicate的使用,你可以理解為:當滿足這種條件后才會被轉(zhuǎn)發(fā),如果是多個,那就是都滿足的情況下被轉(zhuǎn)發(fā)。

Path 方式匹配轉(zhuǎn)發(fā)

通過Path轉(zhuǎn)發(fā)示例,我們講解下上面的兩種配置,分別是application.yml以及RouteLocator

配置文件匹配地址轉(zhuǎn)發(fā)

我們在application.yml配置文件內(nèi)添加對應的路由配置,如下所示:

spring:
  application:
    name: spring-cloud-gateway-sample
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            # 匹配路徑轉(zhuǎn)發(fā)
            - Path=/api-boot-datasource-switch.html
# 端口號
server:
  port: 9090

先來解釋下route的組成部分:

id:路由的ID

uri:匹配路由的轉(zhuǎn)發(fā)地址

predicates:配置該路由的斷言,通過PredicateDefinition類進行接收配置。

在上面的配置中,當訪問http://localhost:9090/api-boot-datasource-switch.html時就會被自動轉(zhuǎn)發(fā)到http://blog.yuqiyu.com/api-boot-datasource-switch.html,這里要注意完全匹配Path的值時才會進行路由轉(zhuǎn)發(fā)。

訪問效果如下所示:

RouteLocator 匹配路徑轉(zhuǎn)發(fā)

在上面的配置中,如果使用RouteLocator方式該怎么進行配置呢?

如下所示:

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
  return builder.routes()
    .route("blog", r -> 
           r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
    .build();
}
Before 方式匹配轉(zhuǎn)發(fā)

當部署有訪問時間限制的接口時,我們可以通過Before Predicate來完成某一個時間點之前允許訪問,過時后則不允許轉(zhuǎn)發(fā)請求到具體的服務,配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Before=2019-05-01T00:00:00+08:00[Asia/Shanghai]

在上面配置中,我們允許2019-05-01日凌晨之前通過路由轉(zhuǎn)發(fā)到http://blog.yuqiyu.com,通過查看org.springframework.cloud.gateway.handler.predicate.BeforeRoutePredicateFactory源碼我們發(fā)現(xiàn),Spring Cloud GatewayBefore斷言采用的ZonedDateTime進行匹配時間,這里要注意存在時區(qū)的問題,需要配置[Asia/Shanghai]作為中國時區(qū)。

After 方式匹配轉(zhuǎn)發(fā)

After PredicateBefore配置使用一致,匹配某一個時間點之后允許路由轉(zhuǎn)發(fā),如下所示配置:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - After=2019-04-29T00:00:00+08:00[Asia/Shanghai]

在上面配置中允許2019-04-29凌晨之后進行轉(zhuǎn)發(fā)到http://blog.yuqiyu.com

Between 方式匹配轉(zhuǎn)發(fā)

那如果是一個時間段內(nèi)允許請求轉(zhuǎn)發(fā),通過BeforeAfter組合配置也可以完成,不過Spring Cloud Gateway還是提供了Between方式,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Between=2019-04-29T00:00:00+08:00[Asia/Shanghai], 2019-05-01T00:00:00+08:00[Asia/Shanghai]

在上面配置中,允許在2019-04-29日凌晨后 & 2019-05-01凌晨之前請求轉(zhuǎn)發(fā)到http://blog.yuqiyu.com

Cookie 方式匹配轉(zhuǎn)發(fā)

Spring Cloud Gateway 還提供了根據(jù)Cookie值的方式匹配轉(zhuǎn)發(fā)請求,如果請求中所攜帶的Cookie值與配置的Predicate匹配,那么就可以被允許轉(zhuǎn)發(fā)到指定地址,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Cookie=hengboy, yuqiyu

在上面配置中,如果客戶端發(fā)送請求時攜帶了"hengboy=yuqiyu"的Cookie信息,則允許請求轉(zhuǎn)發(fā)。

測試Cookie方式轉(zhuǎn)發(fā):

curl http://localhost:9090 --cookie "hengboy=yuqiyu"

通過上面方式我們是可以成功轉(zhuǎn)發(fā)請求的,如果我們修改Cookie的值,就會導致無法轉(zhuǎn)發(fā),出現(xiàn)404。

Header 方式匹配轉(zhuǎn)發(fā)

Spring Cloud Gateway可以根據(jù)發(fā)送請求的Header信息進行匹配轉(zhuǎn)發(fā),加入我們可以根據(jù)X-Request-Id的值進行匹配,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Header=X-Request-Id, d+

在上面配置中,如果X-Request-Id的值為數(shù)字,那么就可以轉(zhuǎn)發(fā)到http://blog.yuqiyu.com,我們通過如下方式進行測試:

curl http://localhost:9090 -H "X-Request-Id:123456"

如果頭信息為X-Request-Id:abc時,就會轉(zhuǎn)發(fā)失敗,出現(xiàn)404。

Host 方式匹配轉(zhuǎn)發(fā)

Spring Cloud Gateway可以根據(jù)Host主機名進行匹配轉(zhuǎn)發(fā),如果我們的接口只允許**.yuqiyu.com域名進行訪問,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Host=**.yuqiyu.com

測試如下所示:

 1. curl http://localhost:9090 -H "Host: yuqiyu.com"          // 匹配
 2. curl http://localhost:9090 -H "Host: api.yuqiyu.com"        // 匹配
 3. curl http://localhost:9090 -H "Host: admin.yuqiyu.com"  // 匹配
 3. curl http://localhost:9090 -H "Host: hengboy.com"          // 不匹配
請求方式 方式匹配轉(zhuǎn)發(fā)

Rest請求風格的接口內(nèi)往往會存在多種請求方式的接口,如果我們的接口只允許POST請求訪問,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:
            - Method=POST

發(fā)送GET請求測試:

~ curl http://localhost:9090
{"timestamp":"2019-04-29T06:27:41.121+0000","path":"/","status":404,"error":"Not Found","message":null}

我們的請求并未被Spring Cloud Gateway進行轉(zhuǎn)發(fā),那么我們再來通過POST請求進行測試:

curl -X POST http://localhost:9090

是可以被轉(zhuǎn)發(fā)到目標地址uri的,不過我的這個博客是OSS部署的,阿里云限制了POST訪問,盡管如此我們也證明了可以轉(zhuǎn)發(fā)。

請求參數(shù) 方式匹配轉(zhuǎn)發(fā)

Spring Cloud GateWay還支持根據(jù)指定的參數(shù)進行匹配,Query方式的Predicate也有兩種方式匹配情況,如下所示:

請求中存在xxx參數(shù)

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.yuqiyu.com
          predicates:

我們通過`curl http://localhost:9090?xxx=123`是可以被成功轉(zhuǎn)發(fā)的,只要參數(shù)存在`xxx`就會被成功轉(zhuǎn)發(fā),否則出現(xiàn)404轉(zhuǎn)發(fā)失敗。

- 請求中存在`xxx`參數(shù)且值為`zzz`

spring:

cloud:
  gateway:
    routes:
      - id: blog
        uri: http://blog.yuqiyu.com
        predicates:
          - Query=xxx, zzz
根據(jù)上面配置,我們限定了參數(shù)`xxx`必須為`zzz`時才會被成功轉(zhuǎn)發(fā),否則同樣會出現(xiàn)404抓發(fā)失敗。

### 請求路徑 方式匹配轉(zhuǎn)發(fā)

`Spring Cloud Gateway`提供了請求路徑變量方式匹配轉(zhuǎn)發(fā),如下所示:

spring:
cloud:

gateway:
  routes:
    - id: blog
      uri: http://blog.yuqiyu.com
      predicates:
        - Path=/article/{articleId}
在上面配置中`{articleId}`是一個路徑變量,可以是任意值,匹配`/article/1`、`/article/abc`等,測試如下所示:

~ curl http://localhost:9090/article/1 // 匹配
~ curl http://localhost:9090/article/abc // 匹配
~ curl http://localhost:9090/article/1/1 // 不匹配

### 請求IP 方式匹配轉(zhuǎn)發(fā)

`Spring Cloud Gateway`可以限制允許訪問接口的客戶端`IP`地址,配置后只對指定`IP`地址的客戶端進行請求轉(zhuǎn)發(fā),配置如下所示:

spring:
cloud:

gateway:
  routes:
    - id: blog
      uri: http://blog.yuqiyu.com
      predicates:
        - RemoteAddr=192.168.1.56/24
在上面我們配置了`192.168.1.56/24`,其中`192.168.1.56`是客戶端的`IP`地址,而`24`則是子網(wǎng)掩碼。

### 組合示例

相同的`Predicate`也可以配置多個,請求的轉(zhuǎn)發(fā)是必須滿足所有的`Predicate`后才可以進行路由轉(zhuǎn)發(fā),組合使用示例如下所示:

spring:
cloud:

gateway:
  routes:
    - id: blog
      uri: http://blog.yuqiyu.com
      predicates:
        - Query=author, hengboy
        - Query=yuqiyu
        - Method=GET
        - Cookie=hengboy, yuqiyu
        - Header=X-Request-Id, d+
        - RemoteAddr=192.168.1.56/24
## 總結(jié)

本章節(jié)講解了`Spring Cloud Gateway`的相關(guān)`謂詞、斷言`基本使用方式,`GateWay`內(nèi)部提供了很多種靈活的路由轉(zhuǎn)發(fā)規(guī)則,在同一個路由內(nèi)存在多個`Predicate`時,同時滿足規(guī)則后請求才會被路由轉(zhuǎn)發(fā)。



## 源碼位置

`Gitee`:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74463.html

相關(guān)文章

  • Spring Cloud Gateway的入門案例

    摘要:原文摘要本篇文章主要介紹了什么是,并基于的版本編寫一個的入門案例,即基本代理的路由轉(zhuǎn)發(fā)配置。作為生態(tài)系中的網(wǎng)關(guān),目標是替代,其不僅提供統(tǒng)一的路由方式,并且基于鏈的方式提供了網(wǎng)關(guān)基本的功能,例如安全,監(jiān)控埋點,和限流等。 原文:http://xujin.org/sc/gw/gw-01/ 摘要:本篇文章主要介紹了什么是Spring Cloud Gateway,并基于Spring Clou...

    lavnFan 評論0 收藏0
  • SpringCloud組件: GateWay整合Eureka轉(zhuǎn)發(fā)服務請求

    摘要:單服務我們簡單編寫一個請求地址,輸出字符串信息,添加依賴如下所示配置文件如下所示服務名注冊到服務端口號配置該服務的服務名稱為,這里對應的。 在上一篇文章Spring Cloud GateWay 路由轉(zhuǎn)發(fā)規(guī)則介紹中我們講解了SpringCloud Gateway內(nèi)部提供的斷言、謂語,讓我們可以組合更精確的業(yè)務場景進行請求,既然SpringCloud GateWay擔任了網(wǎng)關(guān)的角色,在之前...

    warmcheng 評論0 收藏0
  • 阿里Sentinel支持Spring Cloud Gateway

    摘要:應對突發(fā)請求時額外允許的請求數(shù)目。勻速排隊模式下的最長排隊時間,單位是毫秒,僅在勻速排隊模式下生效。和為后續(xù)參數(shù)匹配特性預留,目前未實現(xiàn)。 1. 前言 4月25號,Sentinel 1.6.0 正式發(fā)布,帶來 Spring Cloud Gateway 支持、控制臺登錄功能、改進的熱點限流和注解 fallback 等多項新特性,該出手時就出手,緊跟時代潮流,昨天剛發(fā)布,今天我就要給大家分...

    chengtao1633 評論0 收藏0
  • spring cloud gateway 全局過濾器

    摘要:全局過濾器作用于所有的路由,不需要單獨配置,我們可以用它來實現(xiàn)很多統(tǒng)一化處理的業(yè)務需求,比如權(quán)限認證,訪問限制等等。單獨定義只需要實現(xiàn)這兩個接口就可以了。歡迎加入我的知識星球,一起交流技術(shù),免費學習猿天地的課程 全局過濾器作用于所有的路由,不需要單獨配置,我們可以用它來實現(xiàn)很多統(tǒng)一化處理的業(yè)務需求,比如權(quán)限認證,IP訪問限制等等。 接口定義類:org.springframework.c...

    crossea 評論0 收藏0
  • SpringCloud學習(4)

    摘要:本篇介紹并集成是一個服務器,也可以說是進入系統(tǒng)的唯一節(jié)點。它還可能有其他功能,如授權(quán)監(jiān)控負載均衡緩存請求分片和管理靜態(tài)響應處理等。負責請求轉(zhuǎn)發(fā)合成和協(xié)議轉(zhuǎn)換。它可以在協(xié)議與內(nèi)部使用的非友好型協(xié)議間進行轉(zhuǎn)換,如協(xié)議協(xié)議。 ????????本篇介紹并集成ZUUL API getaway:API Gateway是一個服務器,也可以說是進入系統(tǒng)的唯一節(jié)點。這跟面向?qū)ο笤O計模式中的Facade模...

    Michael_Lin 評論0 收藏0

發(fā)表評論

0條評論

zgbgx

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<