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/state
Copy 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/state
Copy 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