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: サーキットブレーカーにより、要求がサービスに到達できるようになります。
以下の手順は、サービスの可用性を確認し、障害をシミュレートしてフォールバック応答を受け取る方法を示しています。
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!"}
MY_APP_NAME-name
サービスの失敗をシミュレートするには、以下を行います。-
Web インターフェイスで
トグル
ボタンを使用します。 -
MY_APP_NAME-name
サービスを実行している Pod のレプリカ数を 0 にスケーリングします。 MY_APP_NAME-name
サービスの/api/state
エンドポイントに対して HTTPPUT
要求を実行し、その状態を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
-
Web インターフェイスで
/api/greeting
エンドポイントを呼び出します。/api/name
エンドポイントで複数の要求が失敗する場合:- Circuit Breaker が開きます。
-
Web インターフェイスの状態インジケーターが
CLOSED
からOPEN
に変わります。 /api/greeting
エンドポイントを呼び出すと、Circuit Breaker はフォールバック応答を実行します。$ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting {"content":"Hello, Fallback!"}
名前
MY_APP_NAME-name
サービスを、可用性に戻します。これを行うには、以下を行います。-
Web インターフェイスで
トグル
ボタンを使用します。 -
MY_APP_NAME-name
サービスを実行する Pod のレプリカ数を 1 にスケーリングします。 MY_APP_NAME-name
サービスの/api/state
エンドポイントに対して HTTPPUT
要求を実行し、その状態を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
-
Web インターフェイスで
/api/greeting
エンドポイントを再度呼び出します。/api/name
エンドポイントでの複数の要求が正常に実行される場合:- Circuit Breaker が閉じます。
-
Web インターフェイスの状態インジケーターが
OPEN
からCLOSED
に変わります。 Circuit Breaker は、
/api/greeting
エンドポイントを呼び出す際にHello World!
グリーティングを返します。$ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting {"content":"Hello, World!"}