springCloud组件Hystrix的用法

128 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

目录

1.提供者降级

1.1 在服务提供方,引入 hystrix 依赖

1.2 定义降级方法

1.3 使用 @HystrixCommand 注解配置降级方法

1.4 在启动类上开启Hystrix功能:@EnableCircuitBreaker

2.消费方降级

2.1 feign 组件已经集成了 hystrix 组件, 不需要再次引坐标。

2.2 定义feign 调用接口实现类,复写方法,即 降级方法

2.3 在 @FeignClient 注解中使用 fallback 属性设置降级处理类。

2.4 配置开启 feign.hystrix.enabled = true


• Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败(雪崩)。

Hystix 主要功能: 降级与熔断

1.提供者降级

Hystix 降级:当服务发生异常或调用超时,返回默认数据

1.1 在服务提供方,引入 hystrix 依赖

    <!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

1.2 定义降级方法

/**
* 定义降级方法:
*  1. 方法的返回值需要和原方法一样
*  2. 方法的参数需要和原方法一样
*/
public Student findFallback(int id){
Student stu = new Student ();
goods.setTitle("提供者--降级了");

        return stu;
}

 

1.3 使用 @HystrixCommand 注解配置降级方法

/**
* 降级:
*  1. 出现异常
*  2. 服务调用超时
*      * 默认1s超时
*
*  @HystrixCommand(fallbackMethod = "findFallback")
*      fallbackMethod:指定降级后调用的方法名称
*/
@GetMapping("/findOne/{id}")
@HystrixCommand(fallbackMethod = "findFallback",commandProperties = {
//设置Hystrix的超时时间,默认1s
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000")
})
public Student findOne(@PathVariable("id") int id){

        //1.造个异常
int i = 3/0;
try {
//2. 休眠2秒
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Student student= studentService.findOne(id);

        student.setTitle(student.getTitle() + ":" + port);//将端口号,设置到了 商品标题上
return student;
}

1.4 在启动类上开启Hystrix功能:@EnableCircuitBreaker

/**
* 启动类
*/
@EnableEurekaClient //该注解 在新版本中可以省略
@SpringBootApplication
@EnableCircuitBreaker // 开启Hystrix功能
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class,args);
}
}

2.消费方降级

2.1 feign 组件已经集成了 hystrix 组件, 不需要再次引坐标。

2.2 定义feign 调用接口实现类,复写方法,即 降级方法

/**
* Feign 客户端的降级处理类
* 1. 定义类 实现 Feign 客户端接口
* 2. 使用@Component注解将该类的Bean加入Spring容器
*/
@Component
public class StudentFeignClientFallback implements StudentFeignClient {
@Override
public Student findGoodsById(int id) {
Student stu = new Student();
stu.setTitle("消费者--降级方法");
return stu;
}
}

2.3 在 @FeignClient 注解中使用 fallback 属性设置降级处理类。

@FeignClient(value = "HYSTRIX-PROVIDER",fallback = StudentFeignClientFallback.class)
public interface StudentFeignClient {
@GetMapping("/student/findOne/{id}")
public Student findStudentById(@PathVariable("id") int id);

}

2.4 配置开启 feign.hystrix.enabled = true

# 开启feign对hystrix的支持
feign:
hystrix:
enabled: true