当前位置: 首页 > 科技观察

SpringCloud系列之Hystrix保险丝

时间:2023-03-19 20:56:32 科技观察

什么是保险丝?保险丝本身是一个开关设置。当一个服务单元发生故障时,它通过熔断器(类似于熔断器)的故障监控返回一个期望给调用者的服务,一个可以处理的替代响应(fallBack),而不是等待很长时间或抛出调用方法无法处理的异常。这样就保证了服务调用者的线程不会被长时间和不必要的占用,从而避免了分布式系统故障的蔓延,甚至雪崩。Hystrix目标通过第三方客户端访问的依赖项(通常通过网络)的延迟和故障来保护和控制。防止复杂分布式系统中的级联故障。快速失败,快速恢复。后退,尽可能优雅地降级。启用实时监控、警报和操作控制。Hystrix设计原则可防止任何单个依赖项耗尽整个容器用户线程从而摆脱负载,快速失败而不是排队。在可行的情况下提供回退,以保护用户免受故障影响。使用隔离技术来限制任何一个依赖项的影响。通过实时指标、监控和警报优化发现时间。通过配置的低延迟传播优化恢复时间。支持Hystrix大部分方面的动态属性更改,允许使用低延迟反馈循环进行实时操作修改。避免在整个客户端执行过程中出现故障,而不仅仅是网络流量。Hystrix断路器Demo引入jar包;org.springframework.cloudspring-cloud-starter-hystrix1.4.6.RELEASE/dependency>打开断路器在启动类上。@SpringBootApplication@EnableEurekaClient//表示是eureka的客户端@EnableFeignClients@EnableDiscoveryClient//提供服务发现@EnableCircuitBreaker//启用hystrix断路器publicclassUserServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserServiceApplication.class,args);}/***远程调用*/@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}/***Feign的日志通过代码传递(或者通过yml配置文件)*/@BeanpublicLogger.LevelfeignLogger(){returnLogger.Level.FULL;}}单回滚方法:/***Hystrix实例:单回滚*@authorBig.Hu*/@RestControllerpublicclassUserController{/***熔断机制*异常后执行getFeignFallback()方法*/@HystrixCommand(fallbackMethod="getFeignFallback")@GetMapping("feign/{id}")publicStringgetFeign(@PathVariable("id")intid){inti=1/0;//异常返回userFeign.getOrder1(id);}privateStringgetFeignFallback(@PathVariable("id")intid){System.out.println("断路器生效");return"提示:网络繁忙,请稍后再试。"+编号;}}访问请求:localhost:7001/feign/555。断路器有效控制台:全局回滚方法:/***Hystrix实例:全局回滚*@authorBig.Hu*/@RestController@DefaultProperties(defaultFallback="defaultFallback")publicclassUserController{@GetMapping("feign/{id}")publicStringgetFeign(@PathVariable("id")intid){inti=1/0;//异常返回userFeign.getOrder1(id);}privateStringdefaultFallback(){System.out。println("全局断路器生效。");return"提示:服务器繁忙,请稍后再试...";}}访问请求:localhost:7001/feign/555。全局断路器生效console:console