8.11. Hystrix
概要
Camel 2.18 から利用可能です。
Hystrix パターンにより、アプリケーションを Netflix Hystrix と統合することができます。これにより、Camel ルートでサーキットブレーカーを提供することができます。Hystrix は、レイテンシーとフォールトトレランスのライブラリーで、以下の目的で設計されています
- リモートシステム、サービス、およびサードパーティーライブラリーへのアクセスポイントを分離
- 失敗の連鎖を止める
- 障害を避けられない複雑な分散システムでの耐障害性を実現
Maven を使用する場合は、Hystrix を使用するために以下の依存関係を pom.xml
ファイルに追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hystrix</artifactId> <version>x.x.x</version> <!-- Specify the same version as your Camel core version. --> </dependency>
Java DSL の例
以下は、インラインのフォールバックルートにフォールバックすることで、Hystrix エンドポイントが遅い処理から保護されることを示すルートの例になります。デフォルトでは、タイムアウトリクエストは 1000ms
であるため、HTTP エンドポイントは素早く応答する必要があります。
from("direct:start") .hystrix() .to("http://fooservice.com/slow") .onFallback() .transform().constant("Fallback message") .end() .to("mock:result");
XML 設定の例
以下は、XML を使用した場合の同じ例になります。
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <hystrix> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
Hystrix フォールバック機能の使用
onFallback()
メソッドは、メッセージを変換したり、Bean などをフォールバックとして呼び出すことができるローカル処理用のものです。ネットワーク経由で外部サービスを呼び出す必要がある場合は、独自のスレッドプールを使用する独立した HystrixCommand
オブジェクトで実行される onFallbackViaNetwork()
メソッドを使用する必要があります。これにより、最初のコマンドオブジェクトを使い切ることはありません。
Hystrix の設定例
Hystrix には、次のセクションに記載されているように、多くのオプションがあります。以下の例は、実行タイムアウトをデフォルトの 1 秒ではなく 5 秒に設定し、サーキットブレーカーが 5 秒 (デフォルト) ではなく 10 秒待機してから、状態がオープンへ遷移したときにリクエストを再度試行する Java DSL を示しています。
from("direct:start") .hystrix() .hystrixConfiguration() .executionTimeoutInMilliseconds(5000).circuitBreakerSleepWindowInMilliseconds(10000) .end() .to("http://fooservice.com/slow") .onFallback() .transform().constant("Fallback message") .end() .to("mock:result");
以下は、XML を使用した場合の同じ例になります。
<camelContext xmlns="http://camel.apache.org/schema/spring"> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <hystrix> <hystrixConfiguration executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
You can also configure Hystrix globally and then refer to that configuration. For example:
<camelContext xmlns="http://camel.apache.org/schema/spring"> <!-- This is a shared config that you can refer to from all Hystrix patterns. --> <hystrixConfiguration id="sharedConfig" executionTimeoutInMilliseconds="5000" circuitBreakerSleepWindowInMilliseconds="10000"/> <route> <from uri="direct:start"/> <hystrix hystrixConfigurationRef="sharedConfig"> <to uri="http://fooservice.com/slow"/> <onFallback> <transform> <constant>Fallback message</constant> </transform> </onFallback> </hystrix> <to uri="mock:result"/> </route> </camelContext>
オプション
Ths Hystrix コンポーネントは以下のオプションをサポートします。Hystrix はデフォルト値を提供します。
名前 | デフォルト値 | 型 | 説明 |
---|---|---|---|
|
| Boolean | サーキットブレーカーを使用して健全性を追跡し、トリップした場合にはショートサーキットリクエストを使用するかどうかを決定します。 |
|
| Integer | サーキットがトリップしてオープンになり、フォールバックロジックへのショートサーキットリクエストが開始されるエラーの割合 (パーセント) を設定します。 |
|
| Boolean | true の値を指定すると、強制的にサーキットブレーカーをクローズ状態にします。そのため、エラーの割合に関係なくリクエストは許可されます。 |
|
| Boolean | true の値を設定すると、サーキットブレーカーはすべてのリクエストを拒否するオープン (トリップ) 状態になります。 |
|
| Integer | サーキットをトリップさせるローリングウィンドウの最小リクエスト数を設定します。 |
|
| Integer | サーキットがトリップした後、リクエストを拒否する時間を設定します。この時間が経過すると、サーキットを再度クローズするかどうかを判断するためのリクエストが試行されます。 |
| ノード ID | String | Hystrix コマンドを識別します。このオプションは設定できません。コマンドを一意にするのは常にノード ID です。 |
|
| Integer |
コアスレッドプールのサイズを設定します。これは、同時実行可能な |
|
| Integer |
|
|
| String |
|
|
| Boolean |
タイムアウトの発生時に |
|
| Integer | 実行完了までのタイムアウトをミリ秒単位で設定します。 |
|
| Boolean |
|
|
| Boolean |
失敗または拒否が発生した場合に |
|
| Integer |
|
|
| String | 統計情報とサーキットブレーカーのプロパティーを関連付けるために使用される Hystrix グループを識別します。 |
|
| Integer | keep-alive 時間 (分単位) を設定します。 |
|
| Integer |
|
|
| Integer | Health Snapshot を取得できるようにする間隔 (ミリ秒単位) を設定します。Health Snapshot は、成功とエラーの割合を算出し、サーキットブレーカーのステータスに影響を与えます。 |
|
| Integer | バケットごとに保持される実行回数の最大値を設定します。時間内により多くの実行が発生した場合はラップされ、バケットの先頭から上書きを開始します。 |
|
| Boolean | 実行レイテンシーを追跡するかどうかを示します。レイテンシーはパーセント値として計算されます。false を指定すると、サマリー統計 (平均値、パーセント) が -1 として返されます。 |
|
| Integer |
|
|
| Integer | パーセント計算をするために実行時間が保持されるローリングウィンドウの期間 (ミリ秒単位) を設定します。 |
|
| Integer | ローリング統計ウィンドウを分割するバケット数を設定します。 |
|
| Integer |
このオプションと以下のオプションは、 |
|
| Integer |
拒否するためのしきい値をキューへ設定します。 |
|
| Boolean |
|
|
| String | このコマンドを実行するスレッドプールを定義します。デフォルトでは、グループキーと同じキーを使用します。 |
|
| Integer | ローリング統計ウィンドウを分割するバケット数を設定します。 |
|
| Integer | 統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリックが保持される期間です。 |