• 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分钟左右的状态,不能查历史状态,比较难找原因。适合双十一,比如每分钟都要监控到。

  • 相关阅读:
    MHA自动切换流程
    手写源码之 简单实现on emit off
    手写源码 -- bind,call,aplly
    多维数组转化为一维数组
    electron+vue中使用nodeJs的fs模块以及上传文件
    制作海报
    vue中引入播放器(百度播放器和腾讯云播放器)
    webpack配置
    webpack
    css样式
  • 原文地址:https://www.cnblogs.com/linlf03/p/12542261.html
Copyright © 2020-2023  润新知