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!"}{"content":"Hello, World!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow リモートエンドポイントが利用できない場合、
nameサービスは HTTP コード500(Internal server error) で応答し、/api/greetingエンドポイントから事前定義されたフォールバック応答を受け取ります。{"content":"Hello, Fallback!"}{"content":"Hello, Fallback!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting {"content":"Hello, World!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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$ curl -X PUT -H "Content-Type: application/json" -d '{"state": "fail"}' http://MY_APP_NAME-name-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/stateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
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
$ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting {"content":"Hello, Fallback!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
名前
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$ curl -X PUT -H "Content-Type: application/json" -d '{"state": "ok"}' http://MY_APP_NAME-name-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/stateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
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
$ curl http://MY_APP_NAME-greeting-MY_PROJECT_NAME.LOCAL_OPENSHIFT_HOSTNAME/api/greeting {"content":"Hello, World!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow