• 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的支持 

    服务限流

    实时监控

    后面补充

  • 相关阅读:
    centos8网络连接(1)虚拟机网卡和网络编辑器设置
    centos7离线安装ruby
    centos7安装ruby-2.6.5,简单快捷的下载与安装方式
    redis 4.0.13 -- 集群模式
    活了
    世界无我
    markdown_test
    关于mimikatz在webshell运行
    可用性自动化V3
    关于sqlmap常用
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164182.html
Copyright © 2020-2023  润新知