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 熔断器

  • 相关阅读:
    网络管理和nmcli命令的使用——网络接口配置-bonding实验步骤
    raid组合优缺点介绍和创建LVM实验个人笔记
    磁盘分区就是这么简单,电脑小白都能看懂的磁盘分区教程!
    C盘优化之桌面移动法,拯救你爆满的C盘!
    电脑软件打开也有讲究,电脑软件打开方式总结!
    电脑使用建议大全,注意这些细节可以让你的电脑更好用!
    CentOS服务器apache绑定多个域名的方法
    CentOS 7使用yum安装PHP5.6
    PhpMyAdmin 配置文件现在需要一个短语密码的解决方法
    CentOs 7.*中配置安装phpMyAdmin的完整步骤记录
  • 原文地址:https://www.cnblogs.com/wangkee/p/9321760.html
Copyright © 2011-2022 走看看