springcloud之hystrix熔断和限流

springcloud之hystrix熔断和限流

hystrix熔断

​ 在微服务系统中,各个微服务之间可能形成一条链式调用,这就会存在一个问题,假如中间的某一个微服务接口调用出现了问题,比说服务挂掉或者异常等,导致调用者无法及时返回,这时候如果大量的请求出现在这条链路上,由于无法响应,所以导致大量请求积累,最终导致整个服务崩掉,严重影响系统运行。这时候就需要一种机制来解决这个问题,hystrix熔断就是解决这个问题的,它会在被调用用方服务挂掉或者异常时及时返回响应,避免大量请求积累等待,从而保证整个系统正常运行,相当于是一种保险机制,熔断更偏向于方法层面的保护,是在服务提供方进行的处理。


1.例如,在springcloud负载均衡Ribbon文章中8001项目的基础上,在方法上加上熔断如下

image-20201015102522825

@RestController
public class DeptController {
    
    

    @Autowired
    DeptService deptService;
    
    @RequestMapping("/dept/get/{id}")
    @HystrixCommand(fallbackMethod = "hystrixGet")
    public Dept queryDeptById(@PathVariable("id") int id) {
    
    

        Dept dept = deptService.queryDeptById(id);

        if(dept==null){
    
    
            throw  new  RuntimeException("不存在该用户");
        }
        return dept;
    }

    public Dept hystrixGet(@PathVariable("id") int id){
    
    

        return new Dept().setDno(id)
                .setDb_source("没有这个数据")
                .setDname("不存在该用户");

    }

}

2.启动类也要加上相关注解

image-20201015102636899

3.测试,查找一个不存在的用户,将会执行熔断方法

image-20201015110207422

hystrix降级

​ hystrix降级和熔断的功能都是为了使用户访问某个崩掉的服务时及时响应,但他们的目的不同,熔断是一种保险机制,避免整个服务挂掉,而降级降级则是从集中资源的利用角度出发,例如存在A和B两个服务,假如A服务访问量大,B服务访问量人少,那么这时候就可以停掉B服务,把所有的资源集中给A服务,但是用户在访问B服务时依然会有结果,这就是服务降级,降级更偏向于接口类层面的保护,是在服务消费方进行的处理。

1.例如,在springcloud之Feign调用文章中项目的基础上,加上hystrix降级机制,

image-20201015111807608

@Component
public class DeptConsumerServiceFallbackFactiry implements FallbackFactory {
    
    
    public Object create(Throwable throwable) {
    
    
        return new DeptConsumerService() {
    
    
            public boolean addDept(Dept dept) {
    
    
                return false;
            }

            public Dept queryDeptById(int id) {
    
    
                return new Dept().setDno(id)
                        .setDname("服务发生降级")
                        .setDb_source("降级");
            }

            public List<Dept> queryAllDept() {
    
    
                return null;
            }
        };
    }
}

image-20201015111932032

2.停掉服务提供者,测试

image-20201015112131497

猜你喜欢

转载自blog.csdn.net/qq_34429554/article/details/109104339