spring cloud gateway統合hstrixグローバルブレーカー操作


gateway統合hystrixグローバルブレーカー
pom.xml追加依存

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
プロファイルでは、spring.cloud.gateway.default-filtersを追加します。

default-filters:
- name: Hystrix
  args:
    name: fallbackcmd
    fallbackUri: forward:/fallbackcontroller
spring.cloud.gateway.default-filtersというコンフィギュレーションです。
以上のような構成では、HystrixCommandを使って残りのフィルタを包装し、fallbackcmdと名づけて、オプションのパラメータfallbackUriを配置し、降格ロジックを呼び出して、要求はURI/fallbackcontrollerのコントローラ処理に転送されます。
以下のように降格処理を定義します。

@RequestMapping(value = "/fallbackcontroller")
public Map<String, String> fallBackController() {
    Map<String, String> res = new HashMap();
    res.put("code", "-100");
    res.put("data", "service not available");
    return res;
}
この時、hystrixタイムアウト時間(ミリ秒)を設定できます。デフォルトは2秒です。

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000
サンプルコード:
https://github.com/wanghongqi/springcloudconsul_test/tree/master/sprigtest_gateway
spring cloud gatewayグローバル溶断
溶断の主な保護は、あるAサービスがBサービスのrpcインターフェースを呼び出すと、突然Bサービスインターフェースが不安定になり、インターフェースの遅延または失敗率が大きくなることを示しています。
この時、Bサービスの呼び出しに失敗したら、Aサービスの大量スレッドリソースが解放されなくなり、最終的にAサービスが不安定になり、故障点がBサービスからAサービスに伝達され、故障が拡大します。
ヒューズとは、Bサービスが故障した場合、Bへの呼び出しを切り、急速な失敗によってAサービスの安定を保証することである。
一:Gatewayプロジェクトのmavenは依存カバンを導入します。
Spring Cloud GatewayはHystrixの溶断特性を利用して、流量が多すぎる時にサービスを格下げします。同じように、まずプロジェクトに依存を追加します。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
二:ヒューズ後転送の作成要求

@RestController
public class FallbackController {
    private Logger log= LoggerFactory.getLogger(getClass());
    @RequestMapping("/error/fallback")
    public Object fallacak(){
        log.info("    !!!");
        return "Service Error!!!";
    }
}
三:yml設定

#       
default-filters:
    - name: Hystrix
      args:
        name: fallbackcmd
        fallbackUri: forward:/error/fallback
    - name: Retry
      args:
        retries: 3
        statuses: BAD_GATEWAY,BAD_REQUEST
        methods: GET,POST
HystrixはGatewayでカプセル化されたフィルターです。もし分からないなら、調べてください。GatwayFilter工場name:HystrixCommandの名前です。fallbackUri:forward:/error/fallbackはfallbackを配置したときに調整するべきパスです。Hystrixを呼び出したfallbackが呼び出されたときに、要求は/error/fallbackというURIに転送されます。
Retryはこの4つのパラメータによって再試行機構を制御します。retries、statuses、methods、seriesretries:再試行回数、デフォルト値は3回です。statuses:HTTPの状態戻り符号は、org.springframe ework.http.HttpStutsを参照してください。methods:どのような方法を指定する要求がリトライロジックを必要としていますか?標準値はGET方法です。参考:org.springframe ework.http.HttpMethodseries:いくつかの列の状態コード構成、参照を取る:org.springframe ewark.http.HttpStuts.Series。該当する状態コードは再試験ロジックになります。標準値はSERVER_です。ERRORは、値が5、つまり5 XX(5から始まる状態コード)で、5つの値があります。

# hystrix      ,3      
hystrix:
    command:
        fallbackcmd:
            execution:
                isolation:
                    strategy: SEMAPHORE
                    thread:
                        timeoutInMilliseconds: 3000
fallbackcmdここでは上に設置されたHystrixCommandと一致する必要があります。
タイムアウト時間を設定します。

以上は個人の経験ですので、参考にしていただければと思います。