zoukankan      html  css  js  c++  java
  • springCloud熔断器

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

  • 相关阅读:
    Java性能总结一(转)
    Java性能总结三(转)
    Java性能总结二(转)
    Jsp设计第三版文摘
    java配置错误记录
    PatternsInJava文摘
    Java性能总结四(转)
    Spring+Struts+Hibernate 简介(转)
    baidu c++吧上的一道题
    IT公司笔试题总结(三)
  • 原文地址:https://www.cnblogs.com/zhq-blogs/p/9322559.html
Copyright © 2011-2022 走看看