マイクロサービスアーキテクチャでは、現象は、通常のサービスとして、サービスが利用できない次いでときAは、発信者のサービスプロバイダ、サービスへの発信者B、C、DのBのサービスであると仮定すると、利用できない発生します時間が経つにつれて、それはBサービスを利用できなくつながる、サービス利用できないBは、分散型アーキテクチャの故障をカスケードこの問題を解決するために、最終的に使用不能システム全体につながる、使用不能C、Dサービスをもたらすことができます直列回路ブレーカと他の保護サービス。
Hystrix春クラウドでブレーカーを達成使用し、春の雲Hystrixは、オープンソースNetflixのフレームワークHystrixの実装に基づいています。ヘルス(健康サービス要求の状態=要求の失敗の数/総数)と比較することによって決定された設定閾値(デフォルトは10秒以内に20台の故障)の現在のサービス状態によって開状態から回路遮断器をオフにします。ブレーカースイッチが回路遮断器を介して要求を許可、オフ時の健康の現在のサービス状態が設定された閾値よりも高い場合、スイッチがオフのままで、現在のサービス状態が設定された閾値未満である場合、スイッチが開状態に切り換えられます。ブレーカースイッチがオンされると、要求は、フォールバック方法が提供されている場合、回路ブレーカーのスイッチが時間をかけて、回路遮断器を自動的に半開状態に入り、オンを介して要求を許可された場合、処理は、フォールバックに入り、禁止しますコール要求が成功した場合、ブレーカーがオフの状態に戻す、または開いたままになります。
:このセクションでは、プロジェクト単位、プロジェクトのアドレスに基づいて構築されhttps://github.com/francis785/springclouddemo.git あなただけの次の手順を行うことができますが、春の雲Hystrixを使用するには、:
1.作成 springcloud・デモ・ユーザーhystrixの モジュールを、 のpom.xml 次のように文書が読み取ります。
<?xmlのバージョン= " 1.0 "エンコード= " UTF-8 "?> <プロジェクトのxmlns = " http://maven.apache.org/POM/4.0.0 " のxmlnsを:XSI = " のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス" のxsi:のschemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd 」 > <親> <たartifactId> springcloud-デモ親</たartifactId> <groupIdを> com.fix </ groupIdを> <バージョン> 1.0 -snapshot </バージョン> </親> <modelVersion>4.0。0 </ modelVersion> <たartifactId> springcloud-デモ・ユーザーhystrix </たartifactId> <依存> <! -必要性はの導入に依存するときフィンチリー、春の雲のグリニッジバージョンは、クライアントプロジェクトを作成します- > <依存関係> <groupIdを> org.springframework.boot </ groupIdを> <たartifactId>スターター・春ブーツ・ウェブ</たartifactId> </依存関係> <依存> <groupIdを> org.springframework.cloud </ groupIdを> <たartifactId> -Cloud-スタータースプリングネットフリックス-ユーレカ・クライアント</たartifactId> </依存関係> <! - hystrixブレーカーのサポート- > <依存> <groupIdを> org.springframework.cloud </ groupIdを> <たartifactId>春・クラウド・スタータNetflixの-hystrix </たartifactId> </依存関係> <! - hystrixCommandAspect的初始化依赖于com.google.common.collect.ImmutableMap - > <依存> <groupIdを> com.google .guava </ groupIdを> <たartifactId>グアバ</たartifactId> <バージョン> 28.0 -jre </バージョン> </依存関係> </依存関係> </プロジェクト>
2.書き込み application.yaml :
サーバー: ポート:8030 ユーレカ: インスタンス: 好む -ip-アドレスを:trueに #Ipは、ホストか クライアント: サービス - URL: defaultzone:HTTP:// localhostを:ユーレカサーバーアドレスを指定するには8761 /ユーレカ/# :春 アプリケーション: 名前:springcloud -demo-ユーザーhystrix
3.メインクラス書く UserHystrixMainを 、としてクラスをマスターする @EnableCircuitBreakerの NOTE開回路ブレーカ機能を示します。
@SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker パブリック クラスUserHystrixMain { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(UserHystrixMain。クラス、引数)。 } @Beanは @LoadBalanced 公共RestTemplate initRestTemplateは(){ 戻り 新しい)(RestTemplateします。 } }
4.調製 UserControllerで 、及び findOrderByUser() 上記プラスの方法 @HystrixCommand コールバックメソッドを指定する注釈:
@RestController パブリック クラスUserControllerで{ @Autowired プライベートRestTemplate RestTemplate; / * * *注文情報問合せユーザIDに従って * @param IDをユーザID * @returnユーザ注文情報 * / @GetMapping(" / findOrderByUser / {ID} " ) @HystrixCommand (fallbackMethod = " fallBackMethod " ) パブリック文字列findOrderByUser(@PathVariable文字列ID){ int型注文ID = 123 ; 戻り 、この(.restTemplate.getForObjectを"HTTP:// SPRINGCLOUD-DEMO-ORDER /ご注文/ "。+注文ID、文字列クラス); } / * * *ご注文お問い合わせコールインタフェース情報を返すために失敗した後 *上記のid述べ@param * @return * / パブリック文字列fallBackMethodを(@PathVariable ID文字列){ リターン " サービスは、現在のクエリ= IDは使用できません" + ID; } }
機能検証
サービス登録センターだけでなく、他のモジュールを起動するために、サービスは、次のサービスレジストリのインスタンスがあります。
ブラウザでのアクセス:HTTP:// localhostを:8030 / findOrderByUser / 1 にアクセスすることができます:
そして、近い springcloud-デモオーダー サービス、訪問していきます。httpを:// localhostを:8030 / findOrderByUser / 1 リンク、それは、以下の情報を求めるプロンプトが表示されます:
説明春クラウドHystrixが有効になります。