5.5.6. 未変更の Node.js Circuit Breaker サンプルアプリケーションとの対話
Node.js サンプルアプリケーションをデプロイしたら、以下のサービスが実行されます。
MY_APP_NAME-name以下のエンドポイントを公開します。
-
このサービスの機能時に
名前を返す /api/name エンドポイントと、このサービスが失敗を示すよう設定されているとエラーが返されます。 -
/api/state エンドポイント。name エンドポイントの動作を制御し、サービスが正しく動作するか、またはエラーを実証する /api/
-
このサービスの機能時に
MY_APP_NAME-greeting以下のエンドポイントを公開します。
/api/greeting エンドポイント。このエンドポイントは、あいまいな応答を取得するために呼び出しできます。/api/greetingエンドポイントを呼び出すと、リクエストの処理の一環としてMY_APP_NAME-エンドポイントに対する呼び出しが発行されます。name サービスの /api/name/api/nameエンドポイントに対して行われる呼び出しは、サーキットブレーカーによって保護されます。リモートエンドポイントが利用可能になると、
nameサービスは HTTP コード200(OK)で応答し、/api/greeting エンドポイントから以下の greetingを受け取ります。{"content":"Hello, World!"}{"content":"Hello, World!"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow リモートエンドポイントが利用できない場合、
nameサービスは HTTP コード500(内部サーバーエラー)で応答し、/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 インターフェース
のToggle ボタンを使用します。 -
MY_APP_NAME-nameサービスを実行している Pod のレプリカ数を 0 にスケールダウンします。 MY_APP_NAME-nameサービスの/api/stateエンドポイントに対して HTTPPUT要求を実行し、その state を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エンドポイントでの複数の要求が失敗する場合:- サーキットブレーカーが開きます。
-
Web インターフェースの状態インジケーターが
CLOSEDからOPENに変更されます。 サーキットブレーカーは、
/api/greetingエンドポイントを呼び出すとフォールバック応答を発行します。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 インターフェース
のToggle ボタンを使用します。 -
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エンドポイントでの複数の要求に成功すると、以下を実行します。- サーキットブレーカーを閉じます。
-
Web インターフェースの状態インジケーターが
OPENからCLOSEDに変更されます。 Circuit Breaker は、
/api/greeting エンドポイントを呼び出すと返します。Hello World!greeting を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