Hystrix熔断器记录

Hystrix熔断器

扇出(级联调用)

分布式系统面临的问题

雪崩的解决方案
  • 超时机制
  • 断路器模式

Hystrix服务熔断

  • 作用
    • 服务的熔断
    • 服务降级
    • 服务限流
    • 近实时监控
  • 所解决的问题
    • 是Netflix开源的一个延迟和容错库
    • 用于隔离访问远程服务、第三方库
    • 防止出现级联失败
服务熔断
1.使用的注解是:@HystrixCommand
2.应对雪崩的一种链路保护机制,一般存在服务端
3.当出现故障时会进行服务降级,进而熔断该节点的服务
4.默认缺省阀值是5秒失败20此
服务降级工作原理叙述(线程隔离,服务降级)
为每个服务都分配一个线程池,线程池已满的时候,后续的请求将会被直接拒绝,
虽然会返回一个错误信息,但不会使服务阻塞产生雪崩
  • 触发条件
    • 代码报错
    • 超时
服务降级代码实现
  1. 导入依赖,向消费方导入依赖

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
  2. 消费者的启动类上添加注解

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableCircuitBreaker
    public class ConsumerApplication {
    	// ...
    }
    //以上三个注解可以使用一个@springCloudApplication代替
    
  3. 编写降级方法

    @RestController
    @RequestMapping(value = "feign")
    public class FeignController {
    
        @Autowired
        private UserFeign userFeign;
    
        @GetMapping("{userName}")
        @HystrixCommand(fallbackMethod = "findByUserNameFallBack")
        public User findByUserName(@PathVariable("userName") String userName){
            return userFeign.findByUserName(userName);
        }
    
        //降级方法
        public User findByUserNameFallBack(String userName){
            User user = new User();
            user.setName("-1");
            user.setNickName("暂停服务");
            return user;
        }
    }
    
  4. 消费端yml文件的超时时间设置,同样会触发降级

    hystrix:
      command:
        default:
          execution.isolation.thread.timeoutInMilliseconds: 2000  # 超时时间,如果超过这个时间将会触发降级,一般这个时间要大于等于ribbon的连接超时时间和通信处理时间
    
服务熔断工作原理
1.初始断路器处于closed状态
2.至少20次的请求成功率低于50%,触发断路器
3.断路器处于open状态,此时所有请求不可访问
4.5秒后断路器打开部分服务
5.监测部分服务短时间内的成功率是否大于50%
6.大于50%-->将断路器再次关闭,小于50%-->将断路器再次打开
服务熔断代码实现
  1. 基于上一个代码实践完成,模拟异常,在user服务内,加入一个判断条件,如果为true则抛出异常
    @GetMapping("/{userName}")
    public User findByUserName(@PathVariable("userName") String userName){
        if (userName.equals("error")){
            throw new RuntimeException("出现异常啦!");
        }
        return userService.findByUserName(userName);
    }
    
  2. 在消费端yml文件中对熔断阀值进行配置
    hystrix:
      command:
        default:
          execution.isolation.thread.timeoutInMilliseconds: 2000
          circuitBreaker:
            errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
            sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
            requestVolumeThreshold: 10 # 触发熔断的最小请求次数,默认20
    
  3. 重启服务,准备两个访问连接
    http://localhost:8000/feign/zhangsan    //必定成功
    http://localhost:8000/feign/error    //必定失败
    
  4. 检查,如果短时间内,失败率大于50%,则触发熔断器,此时正常的访问也会失败,等待10秒后,正常的访问将恢复正常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值