作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服

    实例讲解了Hystrix熔断机制和相应的参数配置作用, 演示了Hystrix在何种情况下对相应的接口服务进行熔断,  以及何时能够恢复熔断为关闭状态,  Hystrix Dashboard提供了web可视界面进行观察Hystrix内部的熔断情况


项目对应的实例代码可以通过【下载实例】按钮获取

开发工具: IntelliJ IDEA2017, JDK1.8, Maven 3.0.2

【项目包含内容】(见下图):   

hystrix: 熔断程序

hystrixdashboard: web可视化界面用于监控hystrix

image.png


1. hystrix工程 (监听端口: 8080)

    @HystrixCommand配置熔断接口, 见下面代码, 接口getHystrixProductInfoList可熔断,  接口test不可熔断;

       defaultFallback为服务不可用时发生的服务降级;

       服务熔断只针对那些配置了服务熔断参数并且发生熔断的接口, 未配置熔断参数和未发生熔断的接口服务不受影响(可正常访问)


正常服务接口:                                                        http://localhost:8080/test

熔断接口, 不会发生服务降级                                 http://localhost:8080/getHystrixProductInfoList?number=2  

熔断接口,    会发生服务降级(多次调用发生熔断)       http://localhost:8080/getHystrixProductInfoList?number=1 

@RestController
@DefaultProperties(defaultFallback = "defaultFallback")

/*
*   下面几个熔断参数的意义:  https://www.sohu.com/a/134459931_494947
* */
public class HystrixController {
    /*
    * 如果发生熔断,只熔断此接口函数
    * */
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name="circuitBreaker.enabled", value="true"),                         //设置熔断
            @HystrixProperty(name="circuitBreaker.requestVolumeThreshold", value = "10"),         //当在配置时间窗口内达到此数量的失败后,进行短路。默认20个
            @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds", value = "10000"),  //时间窗口
            @HystrixProperty(name="circuitBreaker.errorThresholdPercentage", value = "60")        //出错百分比阈值,当达到此阈值后,开始短路。默认50%
    })
    @GetMapping("/getHystrixProductInfoList")
    public String getHystrixProductInfoList(@RequestParam("number") Integer number){
        if(number % 2 == 0){
            return "success";
        }
        RestTemplate restTemplate = new RestTemplate();
        String str = (String)restTemplate.postForObject("http://127.0.0.1:8005/productInfoList", null, String.class);
        return str;
    }

    /*@HystrixCommand*/
    @GetMapping("/test")
    public String test(){
        return "test";
    }

    private String fallback(){
        return "太拥挤了,请稍后再试~";
    }

    private String defaultFallback(){
        return "默认提示: 太拥挤了, 请稍后再试~";
    }
}


2. hystrixdashboard可视化的web熔断界面   (监听端口: 2001)

    服务启动后,监听在2001端口,  在浏览器中输入: http://localhost:2001/hystrix 打开熔断主界面

    在下图红色框中输入需要熔断监控的服务地址,    http://hystrix-app:port/hystrix.stream

image.png


通过Hystrix Dashboard主页面的文字介绍,我们可以知道,Hystrix Dashboard共支持三种不同的监控方式

默认的集群监控:通过URL:http://turbine-hostname:port/turbine.stream开启,实现对默认集群的监控。

指定的集群监控:通过URL:http://turbine-hostname:port/turbine.stream?cluster=[clusterName]开启,实现对clusterName集群的监控。

单体应用的监控:通过URL:http://hystrix-app:port/hystrix.stream开启,实现对具体某个服务实例的监控。

Delay:控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。

Title:该参数可以展示合适的标题。


image.png


在监控的界面有两个重要的图形信息:一个实心圆和一条曲线。

  ▪实心圆:1、通过颜色的变化代表了实例的健康程度,健康程度从绿色、黄色、橙色、红色递减。2、通过大小表示请求流量发生变化,流量越大该实心圆就越大。所以可以在大量的实例中快速发现故障实例和高压实例。

  ▪曲线:用来记录2分钟内流浪的相对变化,可以通过它来观察流量的上升和下降趋势。


注意:当使用Hystrix Board来监控Spring Cloud Zuul构建的API网关时,Thread Pool信息会一直处于Loading状态。这是由于Zuul默认会使用信号量来实现隔离,只有通过Hystrix配置把隔离机制改成为线程池的方式才能够得以展示。


Home