zoukankan      html  css  js  c++  java
  • Spring Cloud Hystrix项目实践和Hystrix监控

    一、Hystrix项目实践

    1、在Cinema影院工程中增加依赖

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    

      

    2、配置属性

    server:
      port: 8301
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    
    
    management:
      endpoints:
        web:
          exposure:
            exclude: "*"
    
    spring:
      application:
        name: cinema-service
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/springclouddeep?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC
        username: root
        password: 123456
        filters: log4j, wall, mergeState
    mybatis-plus:
      mapper-locations: classpath*:com/example/springclouddeep/**/xml/*Mapper.xml
      global-config:
        id-type: 0
        db-column-underline: false
        refresh-mapper: true
    

      

    3、增加注解

    4、对方法配置Hystrix 

    ignoreExceptions的配置CommonServiceException,当抛出CommonServiceException,不做降级处理。

        @HystrixCommand(fallbackMethod = "fallbackMethod",
            commandProperties = {
                    @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD"),
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value= "1000"),
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")
            },
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize", value = "1"),
                    @HystrixProperty(name = "maxQueueSize", value = "10"),
                    @HystrixProperty(name = "keepAliveTimeMinutes", value = "1000"),
                    @HystrixProperty(name = "queueSizeRejectionThreshold", value = "8"),
                    @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "12"),
                    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "1500")
        },ignoreExceptions = CommonServiceException.class)
        @RequestMapping(value = "",method = RequestMethod.GET)
        public BaseResponseVO describeCinemas(BasePageVO basePageVO) throws CommonServiceException {
    
            IPage<DescribeCinemasRespVO> describeCinemasRespVOIPage = cinemaServiceAPI.describeCinemas(basePageVO.getNowPage(), basePageVO.getPageSize());
    
            if(basePageVO.getNowPage()>10000){
                //throw new CommonServiceException(400,"nowPage太大了,不支持此处理");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
            // TODO 调用封装的分页返回方法
    
            return BaseResponseVO.success();
        }
    

      对nowPage值大于10000时,线程休眠2秒,而配置的超时时间timeoutInMilliseconds为1秒 。从而触发熔断,调用fallbackMethod方法。

    fallbackMethod方法如下,该方法的参数和返回值要与describeCinemas保持一致。

        public BaseResponseVO fallbackMethod(BasePageVO basePageVO) throws CommonServiceException{
    
            // 返回一定是成功,或者业务处理失败
            Map<String,Object> result = Maps.newHashMap();
            result.put("code", 500);
            result.put("message","请求处理降级返回");
            return BaseResponseVO.success(result);
        }
    

      

    5、调用请求

    当nowPage小于等于10000时,返回成功

     当nowPage大于10000时,触发熔断

    二、Hystrix的Dashboard使用

    1、打开http://localhost:8301/hystrix

     添加监控http://localhost:8301/actuator/hystrix.stream 

    2、监控图

    3、监控图数字含义

     Hystrix很少作为监控使用,它一般只有2分钟左右的状态,不能查历史状态,比较难找原因。适合双十一,比如每分钟都要监控到。

  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/linlf03/p/12542261.html
Copyright © 2011-2022 走看看