Hystrix
HystrixオープンソースのNetflixは、リソースのシステム使用不能溶液の枯渇を引き起こして、遅延を回避するサービス成分分離、信頼を介してサービスの分離、異常です。
1.サービスのヒューズは何ですか
サービスヒューズは、サービスコールの実行を吹き込まれ、すぐにリソースを解放することができますので、対応する後続の要求は、直接返されたターゲット・サービスを呼び出すために継続ではなく、
またはサービス障害は、障害メッセージがクライアントに返されます。全体的な措置を維持するために、ローカルの犠牲は、吹きと呼ばれています。
2、ヒューズの意味
基本的に、システムが安定しているように、システムを保護するために、
性能の損失を減らします。
タイムリーな応答;
ヒューズ機能:例外処理、ロギング、動作テストが失敗し、マニュアルリセット、同時、加速切断、再試行失敗した要求。
3、三つの状態Hystrix
1.状態(クローズ)を吹き飛ばし
サービスが失敗しない場合、ヒューズは、呼び出し側の呼び出しに制限せずに、位置しています。
2.吹き開状態(オープン)
固定された時間ウィンドウ内インターフェイスコールエラーレートがON状態となり吹き閾値(哺乳類、デフォルト50%)に達し、(哺乳は、デフォルトでは10秒)。
ブロー状態に入った後、ネットワークインタフェースを介してサービスへの後続の呼び出しは、もはやローカルフォールバックメソッドの実装を指示しません。
3.半吹き状態(半開)
一定期間(デフォルト哺乳類、5秒)のためにブローオープン状態に入った後、それは半ヒューズ溶断状態になります。いわゆるハーフヒューズは、サービスコールを復元しようとすることです、
サービスおよびモニタコール成功率のinvoke限られたトラフィックを許可します。成功率が期待されている場合は、そのサービスが吹き飛ばさに復元されました。成功率は依然として非常に低い場合、再度入力してください吹き飛ばさ。
以下のように三つの状態の関係を変換します:
4、SpringBootプロジェクトの統合Hystrixヒューズ技術
Hystrix依存性を追加します。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
添加yml配置
# Hystrix settings
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
# 线程超时15秒,调用Fallback方法
timeoutInMilliseconds: 15000
metrics:
rollingStats:
timeInMilliseconds: 15000
circuitBreaker:
# 10秒内出现3个以上请求(已临近阀值),并且出错率在50%以上,开启断路器.断开服务,调用Fallback方法
requestVolumeThreshold: 3
sleepWindowInMilliseconds: 10000
添加熔断配置类
package com.lmq.configuration;
import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 熔断配置
*/
@Configuration
public class HystrixConfiguration {
@Bean
public HystrixCommandAspect hystrixAspect() {
return new HystrixCommandAspect();
}
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
}
至此就算是把Hystrix集成进项目了,下面看具体使用
@RestController @RequestMapping(value = "/webservice", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @DefaultProperties(defaultFallback = "timeOutError") public class WebServiceController { /** * 该方法是对接口调用超时的处理方法 */ public String timeOutError() { return "time out"; } @GetMapping(value = "test")
public String getDate() {
return "success";
}
只需要在Controller层添加@DefaultProperties注解,defaultFallback为服务失败后默认调用的方法,这里直接返回time out,具体可根据业务需求返回指定数据实现服务降级。