9.5.6. 未変更の Spring Boot Circuit Breaker サンプルアプリケーションとの対話

Spring Boot のサンプルアプリケーションをデプロイした後に、以下のサービスが実行されます。

MY_APP_NAME-name

以下のエンドポイントを公開します。

  • このサービスの稼働時に名前を返す /api/name エンドポイントと、このサービスが失敗を実証するように設定されたときにエラーが返されます。
  • /api/state エンドポイント: /api/name エンドポイントの動作を制御し、サービスが正しく機能するか、または失敗を実証するかどうかを判断します。
MY_APP_NAME-greeting

以下のエンドポイントを公開します。

  • パーソナライズされたグリーティング応答を取得するために呼び出す /api/greeting エンドポイント。

    /api/greeting エンドポイントを呼び出すと、要求の処理の一環として、MY_APP_NAME-name サービスの /api/name エンドポイントに対して呼び出しを実行します。/api/name エンドポイントに対する呼び出しは、Circuit Breaker によって保護されます。

    リモートエンドポイントが利用可能な場合、name サービスは HTTP コード 200 (OK) で応答し、/api/greeting エンドポイントから以下のグリーティングを受け取ります。

    {"content":"Hello, World!"}

    リモートエンドポイントが利用できない場合、name サービスは HTTP コード 500 (Internal server error) で応答し、/api/greeting エンドポイントから事前定義されたフォールバック応答を受け取ります。

    {"content":"Hello, Fallback!"}
  • Circuit Breaker の状態を返す /api/cb-state エンドポイント。状態は次のいずれかです。

    • open: サーキットブレーカーにより、失敗したサービスに要求が到達できないようになります。
    • closed: サーキットブレーカーにより、要求がサービスに到達できるようになります。

以下の手順は、サービスの可用性を確認し、障害をシミュレートしてフォールバック応答を受け取る方法を示しています。

  1. curl を使用して、MY_APP_NAME-greeting サービスに対して GET 要求を実行します。これを行うには、Web インターフェイスの Invoke ボタンを使用することもできます。

    $ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting
    {"content":"Hello, World!"}
  2. MY_APP_NAME-name サービスの失敗をシミュレートするには、以下を行います。

    • Web インターフェイスで トグル ボタンを使用します。
    • MY_APP_NAME-name サービスを実行している Pod のレプリカ数を 0 にスケーリングします。
    • MY_APP_NAME-name サービスの /api/state エンドポイントに対して HTTP PUT 要求を実行し、その状態を fail に設定します。

      $ curl -X PUT -H "Content-Type: application/json" -d '{"state": "fail"}' http://MY_APP_NAME-name-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/state
  3. /api/greeting エンドポイントを呼び出します。/api/name エンドポイントで複数の要求が失敗する場合:

    1. Circuit Breaker が開きます。
    2. Web インターフェイスの状態インジケーターが CLOSED から OPEN に変わります。
    3. /api/greeting エンドポイントを呼び出すと、Circuit Breaker はフォールバック応答を実行します。

      $ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting
      {"content":"Hello, Fallback!"}
  4. 名前 MY_APP_NAME-name サービスを、可用性に戻します。これを行うには、以下を行います。

    • Web インターフェイスで トグル ボタンを使用します。
    • MY_APP_NAME-name サービスを実行する Pod のレプリカ数を 1 にスケーリングします。
    • MY_APP_NAME-name サービスの /api/state エンドポイントに対して HTTP PUT 要求を実行し、その状態を OK に戻します。

      $ curl -X PUT -H "Content-Type: application/json" -d '{"state": "ok"}' http://MY_APP_NAME-name-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/state
  5. /api/greeting エンドポイントを再度呼び出します。/api/name エンドポイントでの複数の要求が正常に実行される場合:

    1. Circuit Breaker が閉じます。
    2. Web インターフェイスの状態インジケーターが OPEN から CLOSED に変わります。
    3. Circuit Breaker は、/api/greeting エンドポイントを呼び出す際に Hello World! グリーティングを返します。

      $ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting
      {"content":"Hello, World!"}