2

私は Spring Cloud Netflix を初めて使用し、それに関していくつか質問があります。
Zuul エッジ サーバーで実行されている Hystrix と共に API Gateway を使用しています。次の動作を正しく理解しているかどうかを確認したいと思います。

API Gateway の「背後」で実行されているマイクロサービスを強制終了してから、hystrix に強制的に回路を開放させます。その後 (約 10 秒)、実行されていないマイクロサービスにリクエストを送信し、タイムアウト エラーを受け取ります。ただし、非常に短い時間 (最大 1 秒) に多数 (数十) の要求を送信すると、SHORTCIRCUIT OPEN エラーが発生します。
回線が開いているのに TIMEOUT エラーが発生する理由に驚きました。しかし、その理由は、最後のリクエストからの時間が circuitBreaker.sleepWindowInMilliseconds を超える場合、API ゲートウェイがマイクロサービスに再度接続して、生きているかどうかを確認しようとしましたが、そうではなかったため、タイムアウトになったためだと思います。それは、短時間に多くのリクエストでSHORTCIRCUIT OPENエラーが発生した理由も説明します。

次のことは、「TIMEOUT」または「SHORTCIRCUIT」エラーを受け取ると、次のようになります。

HystrixRuntimeException: Microservice (timed-out | short-circuited) and no fallback available

この例外を回避するために、zuul サーバー (これはすべてのルートで同じである可能性があります) でフォールバックを指定するにはどうすればよいですか?
私が今まで試したこと:

  • これによると、タイムアウトを回避するために、実行分離戦略を THREAD に設定します。

    hystrix: command.default.execution.isolation.strategy: スレッド

しかし、私が得たhystrix.streamを見た後propertyValue_executionIsolationStrategy":"SEMAPHORE"

  • カスタム RibbonCommand を記述して getFallback() をオーバーライドすることで、 githubに解決策のヒントがあるようですが、 RibbonCommandインターフェイスを見た後です。RibbonCommand もそのスーパー インターフェイスもそのようなメソッドを定義していないことがわかりました。

私のAPIゲートウェイサービス:

@SpringBootApplication
@EnableSidecar // This annotation includes @EnableCircuitBreaker, @EnableDiscoveryClient, and @EnableZuulProxy
@EnableHystrixDashboard
public class ApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }

}

アプリケーション.yml

server:
  port: 10000
sidecar:
  port: 8000
endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
zuul:
  routes:
    microservice:
      path: /microservice/**

hystrix:
  command.default.execution.isolation.strategy: THREAD

debug: true
4

1 に答える 1

1

最新のリリースでは、Zuul レベルでのフォールバックがサポートされています。これは、ZuulFallbackProvider を拡張することによって行われます。例については、以下のリンクにアクセスしてください: https://github.com/spring-cloud-samples/zuul-server/blob/master/src/main/java/zuulserver/ZuulServerApplication.java

フォールバック トリガー自体は、特定のタイプのルート構成では実行されません (たとえば、URL ベースの構成がある場合)。

「これらの単純な URL ルートは、HystrixCommand として実行されず、リボンで複数の URL を負荷分散することもできません。」

于 2016-11-16T01:34:10.347 に答える