Hystrix
作用
1、服务降级
2、服务熔断
3、接近实时监控
服务降级:返回给客户友好的提示;
服务熔断:到达最后服务访问后,直接决绝访问,然后调用服务降级的方法,等同于保险丝;过程:服务降级->服务熔断->恢复调用的链路
服务限流:秒杀高并发等操作,严格禁止一窝蜂拥挤,排队,一秒N个有序的进行;
降级配置方法
pom
spring-cloud-starter-netflix-hystrix
@HystrixCommand(fallbackMethod='payement' commandProperties={@HystixProperty(name="execution.isolation.thread.timeoutInMIlliseconds",value="3000")})//方法出现问题返回调用payment方法,最多三秒钟
public String go() {
//.........//只要出错就会调用下面的方法
}
public String payment() {//兜底的方案
//熔断调用的方法,返回友好的提示语言
}
同时主启动力@EnableCircleBreaker
yml配置
feign:
hystrix:
enable: true
默认服务降级
全局服务降级配置,对应下面的请求方法内部不可以在使用@HystirxCommand(.....)//...里面配置不可以再定义 fallback不可以使用
@DefaultProperties(defaultFallback = "payment_Globak_FallbackMethod")
public class orderHystirxController {
public String payment_Global_FallbackMethod() {
return "global异常处理信息";
}
}
运行时可能出现的异常
- 运行
- 超时
- 宕机
###对于Feign进行降级的解耦
@FeignClient(value="CLOUD-PROVIDER-HYDTRIX-PAYMENT",fallback = “PaymentFallbacckService.class”)//服务熔断反调PaymentFallbacckService.class
public interface PaymentHystrixService {
@GetMapping("/payment/hystrix/ok/{id}")
public String payment_ok(@Pathvarible("id")String id);
}
//通过接口实现对应的fallback退回
public class PaymentFallbacckService implements PaymentHystrixService {
public String PaymentHystrixService(Integer id) {
return "请等待emmmm";
}
}
熔断机制
熔断机制是应对雪崩的一种为服务的链路保护机制。当扇出链路的某个服务出错或者不可以使用或者响应太久时会出现服务降级,进而出现熔断该节点微服务调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。
springcloud出现熔断通过Hystrixs实现。当超过一定的阀值时,缺省是5秒20次调用失败,会启动熔断机制,熔断的注解为@HystrixCommand
一般熔断注解使用方式
@HystrixCommand(fallbackMethod=“paymentCircle_back” commandProperties = {//默认断路方法
@HystrixProperty(name=“circuitBreaker.enabeld”,value="true’),//开启断路器
@HystrixProperty(name=“CircuitBreaker.requestvolumeThreshold” value=“10”),//请求次数超出峰值熔断器将会从关闭状态打开
@HystrixProperty(name=“CircuitBreaker.sleepWindowInMilliseconds”,value=“10000”),//超出时间范围
})
@HystrixProperty(name=“CircuitBreaker.errorThresholdPercentage”,value=“60”),//失败率达到多少开始跳闸
涉及到断路器的三个参数:快照时间窗、请求总数阀值、错误的百分比值
快照窗口默认为10s
请求总数阀值:默认为20在10秒内,如果不到20级时请求超时也不会打开
错误百分比阀值:在总的请求中错误阀值的比例占到多少。
推荐糊涂工具包
<dependency>
<group>cn.hutool</group>
<artifactId>hutool-all</artifactId>
<version>5.1.o</version>
</dependency>
熔断图形化
依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-dashboard</artifactId>
</dependency>
注视启动类加注解@EnableHystrixDashboard
同时在yml中配置对应的端口号
注:涉及到监控下面注解一定要有
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-cloud-starter-actuator</artifactId>
</dependency>
服务监控必须增加以下配置是未来应对springcloud升级之后的问题
@Bean
public servletRegistratiojnBean getServlet() {
HystrixMericsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
retistrationBean.setLoadOnStartup(1);
registrationBean.add("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}