統合hystrixフレームワークを続ける前にプロジェクトに続き、Netflixのモジュールのためのhystrixフレームワークは、フォールトトレラントなフレームワークです。サービスプロバイダが異常な状況は、通常のタイムアウト要求が発生したと返すにつながることができない場合、ユーザは、呼び出し側のサービスにアクセスする場合、サービスは、発信者、継続的な要求を知らなかった、これはサービスの崩壊につながります。
伝統的な解決策:サービスプロバイダがサービスを提供できないとき人間の肉のタイムアウトメカニズム、運用、保守を追加し、この問題を解決するために、正確にhystrix、それは、発信者とサービス提供者との間にフォールトトレランスを追加し、サービスブロックされた呼び出し側がタイムアウトに応じて要求し、ロールバック・ロジックを呼び出します。
1、hystrixが依存している追加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
図2は、回路遮断器はapplication.javaクラス注釈を@EnableCircuitBreaker加えました。
図3に示すように、クラスは、コントローラに加え、最大タイムアウトスレッド@DefaultProperties値を設定している、我々/ハローインターフェースは3秒、2秒に設定されたタイムアウトhystrixためにブロックされたスレッドを追加し、バックオフ方法のロジックように。@HystrixCommandインターフェース方法でfallbackMethodパラメータでメソッド名フォールバックロジックがあります。代替方法としてhelloFallback()メソッド。
@RestController
@DefaultProperties(groupKey = "hello-groupKey",
commandProperties = {
// 超时时间(毫秒)
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
},
threadPoolProperties = {
// 最大线程数
@HystrixProperty(name = "coreSize", value = "2")
})
public class MyRestController {
@Autowired
private IService iService;
@GetMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@HystrixCommand(fallbackMethod = "helloFallback", commandKey = "hello-commandKey")
public String hello() throws InterruptedException {
Thread.sleep(3000);
String hello = iService.hello();
return "hello: " + hello;
}
public String helloFallback() {
return "helloFallback";
}
}