zoukankan      html  css  js  c++  java
  • springcloud ----Hystrix熔断器

    在分布式系统里面,许多依赖难免会调用失败,比如超时等,Hystrix能保证一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障。

    当某个服务单元发生故障时,通过熔断器的故障监控,向调用方返回一个符合预期的,可处理的备选响应,而不是长时间的等待或抛出无法调用的异常,这样就可以保证服务调用方的线程不会长时间被暂用,从而避免故障在分布式系统中蔓延。

    Hystrix是服务端的处理技术

    pom文件中添加下面依赖

    <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>

    配置文件中配置注册到eureka中心以及一些mybatis等相关的信息,

    启动类上添加@EnableCircuitBreaker注解,开启Hystrix的熔断器功能

    Hystrix主要有以下几点功能

    服务降级

     在一些情况下,资源快耗尽时,先放弃一些不重要的服务

    服务熔断

    在controller的接口上添加@HystrixCommand(fallbackMethod="processHystrix_Get"),并定义处理错误的方法,

    服务熔断用一句话来解释就是,接口里面有一些情况,比如报错跑异常时,就由HystrixCommand注解上定义的fallbackMethod来处理

    这种方式有一个很严重的问题,每个接口都要有一个对应的fallbackMethod方法,这样会造成controller中方法膨胀,异常处理与业务逻辑也高耦合

    针对这个问题,可以将fallbackMethod放到service层的接口中,在接口中处理这个问题,这样controller中就不会有这2个问题了

    在service接口中处理这个问题需要创建一个类,实现FallbackFactory接口,重写create方法即可,该方法上记得加上@Component注解,具体如下,

    @Component
    public class DeptClientServiceFallBackFactory implements FallbackFactory<DeptClientService> {
    
    	@Override
    	public DeptClientService create(Throwable cause) {
    		
    		return new DeptClientService() {
    			
    			@Override
    			public List<Dept> getAll() {
    				
    				return null;
    			}
    			
    			@Override
    			public Dept get(Long id) {
    				Dept dept = new Dept();
    				dept.setDeptno(id);
    				dept.setDname("找不到相关信息");
    				return dept;
    			}
    			
    			@Override
    			public boolean add(Dept dept) {
    				
    				return false;
    			}
    		};
    	}
    
    }
    

    create方法返回一个具体的service接口的实例,重写接口的方法,重写的内容就是接口调用报错是的处理逻辑,也就是前面讲的fallbackMethod方法中的内容。

    最后要在接口的@FeignClient注解里加上刚创建的 DeptClientServiceFallBackFactory类

    @FeignClient(value = "MICROSERVICECLOUD-DEPT", fallbackFactory=DeptClientServiceFallBackFactory.class)

    最后在配置文件中添加一下对Hystrix的支持 

    服务限流

    实时监控

    后面补充

  • 相关阅读:
    不可小视视图对效率的影响力
    Maximum Margin Planning
    PhysicsBased Boiling Simulation

    Learning Behavior Styles with Inverse Reinforcement Learning
    Simulating Biped Behaviors from Human Motion Data
    Nearoptimal Character Animation with Continuous Control
    Apprenticeship Learning via Inverse Reinforcement Learning
    回报函数学习的学徒学习综述
    Enabling Realtime Physics Simulation in Future Interactive Entertainment
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164182.html
Copyright © 2011-2022 走看看