springCloud-hystrix服务熔断和降级

  • 了解服务雪崩

服务雪崩就是一连串相关联的服务当其中某个服务出现错误,那么此时请求就会阻塞,当很多用户都要访问这个服务的时候,就会引起大面积地阻塞,这就是服务雪崩;到达一定程度就会影响服务器地性能。

  • 什么是降级

简单的说就是:当A服务很多人访问,而B服务很少人访问的时候,A服务需要承受很大的压力才能满足大量的请求,此时解决方法是将B服务关掉,让调用B服务的用户暂时无法调用到服务,这样确保A服务器能顶住压力,否则可能会崩掉(牺牲少数人保证整体能正常运行),那么这时候关掉B服务(自动或人工)就叫做降级。

  • 什么是熔断

熔断就是在某个服务出现问题地时候,系统不应该一直等待或者报错,而是应该调用其他的方法向用户提示该服务出现了问题。hystrix就很好地用于解决这个问题。
基本过程是:编写本地备用方法(也就是不需要访问服务的方法),当对某些请求超时或请求错误或需要降级的服务进行熔断后,就调用这个备用的本地方法。

  • 被调用方熔断

针对于被调用方自身服务出现了问题,自己的问题自己解决
基本步骤:
①开启熔断功能:在著启动类加上@EnableCircuitBreaker注解。
②编写备用方法

   public List<dept> hystrixGetDepts(){
        ArrayList<dept> list=new ArrayList<dept>();
        list.add(new dept(1,"服务出错","no"));
        return list;
    }

③在正常调用方法上加上HystrixCommand注解,参数fallbackMethod的值是备用方法名。(这里用休眠的方法模拟访问超时)

@Autowired
DeptService deptService;
@HystrixCommand(fallbackMethod = "hystrixGetDepts")
@RequestMapping("/getDepts")
public List<dept> getDepts() throws InterruptedException {
    Thread.sleep(3000);
    return deptService.getDepts();
}

④测试结果
在这里插入图片描述

  • 调用方熔断
    常用于降级后的熔断,因为要降级,所以关闭的应该是下游服务,下游提供者的服务关闭之后就执行不了备用方法了,所以熔断的方案在调用方编写。
    如果不使用Feign,在调用方使用上面类似的方法即可;
    如果使用Feign,基本步骤如下:
    ①在调用方导入依赖同上
    ②新建一个备用类,实现FallbackFactory接口(T为业务方法所在的类),重写create方法,返回一个T类型对象,这个对象重写业务方法为备用方法。例:
@Service
public class TestHystrixFeign implements FallbackFactory<testFeign> {
    @Override
    public testFeign create(Throwable throwable) {
        return new testFeign() {
            @Override
            public List<dept> testFeign() {
                ArrayList<dept> list=new ArrayList<dept>();
                list.add(new dept(1,"上游服务出错","no"));
                return list;
            }
        };
    }
}

③在业务方法上的FeignClient注解追加fallbackFactory参数,值为备用类的类对象。如:

@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT",fallbackFactory = TestHystrixFeign.class)

④yml中配置hystrix开启

feign:
  hystrix:
    enabled: true

⑤测试结果
当服务提供者正常提供服务时,调用者能成功拿到数据,当关闭提供者时,显示服务出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值