简介
Hystrix是用于服务熔断,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
服务降级
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。消费者端和服务提供者端都可以配置。服务降级一般使用在服务提供者端。
服务降级维度
- 超时服务器变慢
- 程序出错(服务器宕机,程序编写错误等)
服务降级配置
①搭建项目
- 以consul为注册中心搭建spring cloud项目
- 用OpenFeign实现服务调用
②服务提供者端导入依赖
<!--hystrix依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
③启动类添加注解,激活hystrix组件
@EnableHystrix @EnableDiscoveryClient @SpringBootApplication public class ProviderConsul8001{ public static void main(String[] args) { SpringApplication.run(ProviderConsul8001.class, args); } }
④编写业务,方法上添加@HystrixCommand,实现降级
@RestController @RequestMapping("provider") public class ProviderController { @Value("${server.port}") private String port; @GetMapping("getUUID") //业务处理时间超过2500毫秒 或者 该代码块发生错误 就调用自定义降级方法 @HystrixCommand(fallbackMethod = "getUUIDFallback", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2500") }) public String getUUID() { try { //沉睡3秒钟 TimeUnit.SECONDS.sleep(3); } catch (Exception e) { } return port + " : " + UUID.randomUUID(); } //自定义降级方法 public String getUUIDFallback() { return port; } }
⑤测试
全局服务降级配置
①编写业务,类上添加@DefaultProperties,方法上添加@HystrixCommand,实现降级
@RestController @RequestMapping("provider") //业务处理时间超过2500毫秒 或者 该代码块发生错误 就调用自定义降级方法 @DefaultProperties(defaultFallback = "defaultFallback", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2500") }) public class ProviderController { @Value("${server.port}") private String port; @GetMapping("getUUID") @HystrixCommand public String getUUID() { int i = 10 / 0; try { TimeUnit.SECONDS.sleep(3); } catch (Exception e) { } return port + " : " + UUID.randomUUID(); } //自定义全局降级方法 public String defaultFallback() { return port; } }
②测试
FeignFallback服务降级
①消费端导入依赖
<!--hystrix依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
②编辑application.yml配置文件,添加以下配置
feign: #允许fallback hystrix: enabled: true
③创建Service的实现类,添加@Component注解。用Service的实现类来服务降级
@Component public class ConsumerServiceImpl implements IConsumerService { @Override public String getUUID() { return "fallback"; } }
④Service接口的@FeignClient注解增加fallback 属性,
@Component @FeignClient(value = "cloud-provider",fallback = ConsumerServiceImpl.class) public interface IConsumerService { //服务提供者访问路径 @GetMapping("/provider/getUUID") public String getUUID(); }
⑤只启动注册中心,启动消费者,访问http://localhost/consumer/getUUID