zoukankan      html  css  js  c++  java
  • spring cloud 熔断器

    熔断器 也叫断路器 什么是断路器 它就相当于项目中的保险丝 

    当你的微服务拆分越细 模块越多 他们直接的调用就会越来越复杂

    那可以想一下 如果中间有一个模块 等了五秒钟才能运行成功 

    那么调用方以及调用方的对外服务都需要等五秒 但请求还在不停地进入 这就形成了一个雪崩效应

    请求堆积越来越多 就会使整个分布式架构的崩溃 那么熔断器就可以解决我们的问题

    它可以在依赖方调用缓慢或崩溃的情况下进入自己的回路方法

    熔断器的使用

    1.加入jar包

     // https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix
        compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-hystrix'

    2.在调用方的调用方法上写代码 以下是例子

    @Controller
    public class PageController {
        public static Logger logger =LoggerFactory.getLogger(PageController.class);
        @Autowired
        private RestTemplate restTemplate;
        @HystrixCommand(fallbackMethod = "backMethod")
        @RequestMapping(value = "index")
        public String toIndex(Model model){
            System.out.println("进入index");
            logger.info("执行了查询 开始调用PROJECT-POPPY-SOLR的服务");
            String msg=restTemplate.getForEntity("http://user:user password:123@PROJECT-POPPY-SOLR/search",String.class).getBody();
            logger.info("调用微服务结束");
            model.addAttribute("msg",msg);
            return "index";
        }
        public String backMethod(Model model){
            System.out.println("进入回路方法");
            model.addAttribute("msg","服务不可用 请稍后重试");
            return "index";
        }
    }

    在调用方的调用方法上加上@HystrixCommand(fallbackMethod="回路方法")

    注意 这里回路方法的返回值以及参数必须与原方法对应 否则系统就不认为你是回路方法

    在回路方法中编写自己的代码 如果方法崩溃或调用过慢 就会进入指定的回路方法 下面会演示

    3.配置 

    hystrix:
      command:
        default:
         execution:
          isolation:
            thread:
             timeoutInMilliseconds: 7000 #请求响应时间 如果过了这个时间就会进入回路方法
         circuitBreaker:
              requestVolumeThreshold: 2 # 服务降级:此请求连续多少次响应过慢或崩溃 系统就默认把它当成一个崩溃的方法 在一定时间内调用此方法会直接进入回路方法 这样执行更快 
                          默认值是20 请求该方法20次 如果崩溃或响应过慢率大于百分之八十 就会默认它是一个崩溃方法
          #timeout:
            #enabled: false #取消超时检查 无论线程运行多久 只要不崩溃就不进入回路方法 一般情况不使用

    4启动类上加上

    @EnableCircuitBreaker

    我这边故意在被调用方的方法上加上线程休眠 看一下运行结果 

    看到了这里显示不可用 说明进入了回路方法 看一下控制台

     看到了先进入了index方法 然后被调用方加载过慢 过了我们配置的七秒所以这里就进入了回路方法 

    我们来试试多次连续运行 

    看到了只进入了两次我们的index 然后就不进入了 运行直接进入回路方法

    以上就是spring cloud 熔断器

  • 相关阅读:
    Python面向对象(组合、菱形继承、多态)
    Python面向对象
    Python hash、xml、configparser、sheve、shutil模块讲解 以及 面向对象初识
    python正则re模块
    Python序列化、date、random、os模块
    Python包和日志模块
    python面向对象、模块讲解
    python递归函数、二分法、匿名函数、(sorted、map、filter内置函数应用)
    Python生成器、三元表达式、列表生成式、字典生成式、生成器表达式
    Python迭代器
  • 原文地址:https://www.cnblogs.com/wangkee/p/9321760.html
Copyright © 2011-2022 走看看