Spring Cloud Hystrix GatewayFilter工廠

2024-01-04 17:40 更新

Hystrix是Netflix的一個(gè)庫,它實(shí)現(xiàn)了斷路器模式。Hystrix GatewayFilter允許您將斷路器引入網(wǎng)關(guān)路由,保護(hù)服務(wù)免受級聯(lián)故障的影響,并允許您在下游故障的情況下提供后備響應(yīng)。

要在您的項(xiàng)目中啟用Hystrix GatewayFilters,請?zhí)砑訉?/font>Spring Cloud Netflix中的 spring-cloud-starter-netflix-hystrix的依賴。

Hystrix GatewayFilter工廠需要一個(gè)name參數(shù),它是HystrixCommand的名稱。

application.yml。 

spring:
  cloud:
    gateway:
      routes:
      - id: hystrix_route
        uri: https://example.org
        filters:
        - Hystrix=myCommandName

這會(huì)將其余過濾器包裝在命令名稱為myCommandNameHystrixCommand中。

Hystrix過濾器還可以接受可選的fallbackUri參數(shù)。當(dāng)前,僅支持forward:計(jì)劃的URI。如果調(diào)用了后備,則請求將被轉(zhuǎn)發(fā)到與URI相匹配的控制器。

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
        - RewritePath=/consumingserviceendpoint, /backingserviceendpoint

調(diào)用Hystrix后備廣告時(shí),它將轉(zhuǎn)發(fā)到/incaseoffailureusethis URI。請注意,此示例還通過目標(biāo)URI上的lb前綴演示了(可選)Spring Cloud Netflix Ribbon負(fù)載均衡。

主要方案是將fallbackUri用于網(wǎng)關(guān)應(yīng)用程序中的內(nèi)部控制器或處理程序。但是,也可以將請求重新路由到外部應(yīng)用程序中的控制器或處理程序,如下所示:

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

在此示例中,網(wǎng)關(guān)應(yīng)用程序中沒有fallback端點(diǎn)或處理程序,但是,另一個(gè)應(yīng)用程序中沒有fallback端點(diǎn)或處理程序,已在http://localhost:9994下注冊。

如果將請求轉(zhuǎn)發(fā)到后備,則Hystrix網(wǎng)關(guān)過濾器還會(huì)提供引起請求的Throwable它作為ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR屬性添加到ServerWebExchange中,可以在網(wǎng)關(guān)應(yīng)用程序中處理后備時(shí)使用。

對于外部控制器/處理程序方案,可以添加帶有異常詳細(xì)信息的標(biāo)頭。您可以在FallbackHeaders GatewayFilter Factory部分中找到有關(guān)它的更多信息。

Hystrix設(shè)置(例如超時(shí))可以使用全局默認(rèn)值進(jìn)行配置,也可以使用Hystrix Wiki中所述的應(yīng)用程序?qū)傩栽谥饤l路由的基礎(chǔ)上進(jìn)行配置。

要為上述示例路由設(shè)置5秒超時(shí),將使用以下配置:

application.yml。 

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號