spring cloud gateway系列教程2——GatewayFilter_上篇

spring cloud gateway系列教程目錄

  1. spring cloud gateway系列教程1—Route Predicate
  2. spring cloud gateway系列教程2——GatewayFilter_上篇
  3. spring cloud gateway系列教程2——GatewayFilter_下篇
  4. spring cloud gateway系列教程3—Global Filters
  5. spring cloud gateway系列教程4—其他配置

GatewayFilter Factories

Route filters可以通過一些方式修改HTTP請求的輸入和輸出,針對某些特殊的場景,Spring Cloud Gateway已經(jīng)內置了很多不同功能的GatewayFilter Factories驴娃。

下面就來通過例子逐一講解這些GatewayFilter Factories。

1. AddRequestHeader GatewayFilter Factory

AddRequestHeader GatewayFilter Factory通過配置name和value可以增加請求的header劲件。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: http://www.google.com
        filters:
        - AddRequestHeader=X-Request-Foo, Bar

對匹配的請求,會額外添加X-Request-Foo:Bar的header约急。

2. AddRequestParameter GatewayFilter Factory

AddRequestParameter GatewayFilter Factory通過配置name和value可以增加請求的參數(shù)零远。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_parameter_route
        uri: http://www.google.com
        filters:
        - AddRequestParameter=foo, bar

對匹配的請求,會額外添加foo=bar的請求參數(shù)厌蔽。

3. AddResponseHeader GatewayFilter Factory

AddResponseHeader GatewayFilter Factory通過配置name和value可以增加響應的header牵辣。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: http://www.google.com
        filters:
        - AddResponseHeader=X-Response-Foo, Bar

對匹配的請求,響應返回時會額外添加X-Response-Foo:Bar的header返回奴饮。

4. Hystrix GatewayFilter Factory

Hystrix是Netflix實現(xiàn)的斷路器模式工具包纬向,The Hystrix GatewayFilter就是將斷路器使用在gateway的路由上择浊,目的是保護你的服務避免級聯(lián)故障,以及在下游失敗時可以降級返回逾条。

項目里面引入spring-cloud-starter-netflix-hystrix依賴琢岩,并提供HystrixCommand的名字,即可生效Hystrix GatewayFilter师脂。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: hystrix_route
        uri: http://www.google.com
        filters:
        - Hystrix=myCommandName

那么剩下的過濾器担孔,就會包裝在名為myCommandName的HystrixCommand中運行。

Hystrix過濾器也是通過配置可以參數(shù)fallbackUri危彩,來支持路由熔斷后的降級處理攒磨,降級后,請求會跳過fallbackUri配置的路徑汤徽,目前只支持forward:的URI協(xié)議。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: hystrix_route
        uri: lb://backing-service:8088
        predicates:
        - Path=/consumingserviceendpoint
        filters:
        - name: Hystrix
          args:
            name: fallbackcmd
            fallbackUri: forward:/incaseoffailureusethis

當Hystrix降級后就會將請求轉發(fā)到/incaseoffailureusethis灸撰。

整個流程其實是用fallbackUri將請求跳轉到gateway內部的controller或者handler谒府,然而也可以通過以下的方式將請求轉發(fā)到外部的服務:
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: ingredients
        uri: lb://ingredients
        predicates:
        - Path=//ingredients/**
        filters:
        - name: Hystrix
          args:
            name: fetchIngredients
            fallbackUri: forward:/fallback
      - id: ingredients-fallback
        uri: http://localhost:9994
        predicates:
        - Path=/fallback

以上的例子,gateway降級后就會將請求轉發(fā)到http://localhost:9994浮毯。

Hystrix Gateway filter在轉發(fā)降級請求時完疫,會將造成降級的異常設置在ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR屬性中,在處理降級時也可以用到债蓝。

比如下一節(jié)講到的FallbackHeaders GatewayFilter Factory壳鹤,就會通過上面的方式拿到異常信息,設置到降級轉發(fā)請求的header上饰迹,來告知降級下游異常信息芳誓。

通過下面配置可以設置Hystrix的全局超時信息:
application.yml

hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000

5. FallbackHeaders GatewayFilter Factory

FallbackHeaders GatewayFilter Factory可以將Hystrix執(zhí)行的異常信息添加到外部請求的fallbackUriheader上。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: ingredients
        uri: lb://ingredients
        predicates:
        - Path=//ingredients/**
        filters:
        - name: Hystrix
          args:
            name: fetchIngredients
            fallbackUri: forward:/fallback
      - id: ingredients-fallback
        uri: http://localhost:9994
        predicates:
        - Path=/fallback
        filters:
        - name: FallbackHeaders
          args:
            executionExceptionTypeHeaderName: Test-Header

在這個例子中啊鸭,當請求lb://ingredients降級后锹淌,FallbackHeadersfilter會將HystrixCommand的異常信息,通過Test-Header帶給http://localhost:9994服務赠制。

你也可以使用默認的header赂摆,也可以像上面一下配置修改header的名字:

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("Root-Cause-Exception-Type")
  • rootCauseExceptionMessageHeaderName ("Root-Cause-Exception-Message")

6. PrefixPath GatewayFilter Factory

The PrefixPath GatewayFilter Factor通過設置prefix參數(shù)來路徑前綴。
application.yml

spring:
  cloud:
    gateway:
      routes:
      - id: prefixpath_route
        uri: http://www.google.com
        filters:
        - PrefixPath=/mypath

如果一個請求是/hello钟些,通過上面路由烟号,就會將請求修改為/mypath/hello

7. PreserveHostHeader GatewayFilter Factory

PreserveHostHeader GatewayFilter Factory會保留原始請求的host頭信息政恍,并原封不動的轉發(fā)出去汪拥,而不是被gateway的http客戶端重置。

application.yml:

spring:
  cloud:
    gateway:
      routes:
      - id: preserve_host_route
        uri: http://www.google.com
        filters:
        - PreserveHostHeader

由于GatewayFilter Factory比較多抚垃,分開兩篇來寫喷楣,下一篇

如果想查看其他spring cloud gateway的案例和使用趟大,可以點擊查看

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铣焊,隨后出現(xiàn)的幾起案子逊朽,更是在濱河造成了極大的恐慌,老刑警劉巖曲伊,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叽讳,死亡現(xiàn)場離奇詭異,居然都是意外死亡坟募,警方通過查閱死者的電腦和手機岛蚤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懈糯,“玉大人涤妒,你說我怎么就攤上這事∽” “怎么了她紫?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屿储。 經(jīng)常有香客問我贿讹,道長,這世上最難降的妖魔是什么够掠? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任民褂,我火速辦了婚禮,結果婚禮上疯潭,老公的妹妹穿的比我還像新娘赊堪。我一直安慰自己,他們只是感情好袁勺,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布雹食。 她就那樣靜靜地躺著,像睡著了一般期丰。 火紅的嫁衣襯著肌膚如雪群叶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天钝荡,我揣著相機與錄音街立,去河邊找鬼。 笑死埠通,一個胖子當著我的面吹牛赎离,可吹牛的內容都是我干的。 我是一名探鬼主播端辱,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梁剔,長吁一口氣:“原來是場噩夢啊……” “哼虽画!你這毒婦竟也來了?” 一聲冷哼從身側響起荣病,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤码撰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后个盆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脖岛,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年颊亮,在試婚紗的時候發(fā)現(xiàn)自己被綠了柴梆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡终惑,死狀恐怖绍在,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情雹有,我是刑警寧澤揣苏,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站件舵,受9級特大地震影響,放射性物質發(fā)生泄漏脯厨。R本人自食惡果不足惜铅祸,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望合武。 院中可真熱鬧临梗,春花似錦、人聲如沸稼跳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汤善。三九已至什猖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間红淡,已是汗流浹背不狮。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留在旱,地道東北人摇零。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像桶蝎,于是被迫代替她去往敵國和親驻仅。 傳聞我的和親對象是個殘疾皇子谅畅,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內容