zoukankan      html  css  js  c++  java
  • springcloud之Hystrix

    案例代码:https://gitee.com/menbbo/springclouddemo.git

    Hystrix断路器

    什么是hystrix?

    Hystrix是一个用来处理分布式系统的延迟和容错的开源库,在分布式系统里,很多依赖会不可避免的调用失效,比如超时、异常。Hystrix能够保证一个依赖出现问题时,不会导致服务整体失效,避免级联故障,以提高分布式系统的弹性。

    “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方法返回一个服务预期的,可处理的备选响应(fallback),而不是长时间的等待或是跑出异常,这样可以保证服务调用的线程不会长时间的被占用。不必要的占用,从而避免了故障在分布式系统中的蔓延。

    Hystrix的功能

    Hystrix的功能主要有:服务降级、服务熔断、服务限流以及接近实时的监控。

    服务降级:服务降级是指在服务压力剧增时,根据当前业务的情况有选择性的对一些服务有策略的降级,减轻服务器的压力,保证核心任务的运行。

    服务熔断:服务熔断是指由于某些原因使服务出现故障,为了防止整个系统故障,从而采取的一种保护措施,也称之为过载保护。

    服务限流:服务限流是指对并发访问进行限速来保护系统。

    监控:HystrixCommand和HystrixObservableCommand在执行时,会生成执行结果和运行指标,比如每秒执行的请求数和成功数。

    springcloud关于hystrix的应用

    (1)consumer模块中添加依赖

        <dependency>
                <groupId>com.netflix.hystrix</groupId>
                <artifactId>hystrix-core</artifactId>
            </dependency>
            <dependency>
                <groupId>com.netflix.hystrix</groupId>
                <artifactId>hystrix-javanica</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>com.netflix.hystrix</groupId>
                <artifactId>hystrix-metrics-event-stream</artifactId>
            </dependency>

    (2)consumer01模块中创建IndexApi接口

    @FeignClient(value = "SEARCH")
    public interface IndexApi {
        @RequestMapping(value = "/index")
        public String index();
    }

    (3)该接口的具体的实现在producet01模块下的ProducerController中,此时使用@HystrixCommand(fallbackMethod = "index2")注解可实现服务熔断功能。即当index()方法出现异常时,可调用index2()进行处理。

    @RestController
    public class ProducerController {
        @RequestMapping(value = "/index")
        @HystrixCommand(fallbackMethod = "index2")//熔断 调用fun2
        public String index(){
            int a= 1/0;  //服务熔断 处理过程在服务端  ,服务降级处理逻辑在客户端。
            String index = "producer01.......";
            System.out.println("producer01.......");
            return index;
        }
    
        public String index2(){
            System.out.println("index2");
            return "index2";
        }

    启动以上服务,访问localhost:8086/index可以看见访问了index2方法。

    (4)在IndexApi接口中添加参数fallbackFactory = IndexApiHystrix.class

    @FeignClient(value = "SEARCH",fallbackFactory = IndexApiHystrix.class)
    public interface IndexApi {
        @RequestMapping(value = "/index")
        public String index();
    }

    (5)服务降级实现,在consumer01模块中,创建IndexApiHystrix类实现FallbackFactory接口。

    @Component
    public class IndexApiHystrix implements FallbackFactory {
        @Override
        public IndexApi create(Throwable throwable) {
    
            IndexApi indexApiHystrix  =  new IndexApi() {
               @Override
               public String index() {
                   return "服务降级调用index方法";
               }
           };
            return indexApiHystrix ;
        }

    (6)consumer01启动类,添加@EnableCircuitBreaker注解

    @SpringBootApplication
    @EnableFeignClients //feign服务调用
    @EnableDiscoveryClient
    @EnableCircuitBreaker
    public class Consumer01Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Consumer01Application.class, args);
        }
        @Bean
        public ServletRegistrationBean hys(){
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
            servletRegistrationBean.addUrlMappings("/actuator/hystrix.stream");
            return servletRegistrationBean;
        }
    }

    注释掉ProducerController的注解 @HystrixCommand(fallbackMethod = "index2")启动服务,访问url得到结果:

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/menbo/p/13532544.html
Copyright © 2011-2022 走看看