实例讲解了Hystrix熔断机制和相应的参数配置作用, 演示了Hystrix在何种情况下对相应的接口服务进行熔断, 以及何时能够恢复熔断为关闭状态, Hystrix Dashboard提供了web可视界面进行观察Hystrix内部的熔断情况
项目对应的实例代码可以通过【下载实例】按钮获取
开发工具: IntelliJ IDEA2017, JDK1.8, Maven 3.0.2
【项目包含内容】(见下图):
hystrix: 熔断程序
hystrixdashboard: web可视化界面用于监控hystrix
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
通过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:该参数可以展示合适的标题。
在监控的界面有两个重要的图形信息:一个实心圆和一条曲线。
▪实心圆:1、通过颜色的变化代表了实例的健康程度,健康程度从绿色、黄色、橙色、红色递减。2、通过大小表示请求流量发生变化,流量越大该实心圆就越大。所以可以在大量的实例中快速发现故障实例和高压实例。
▪曲线:用来记录2分钟内流浪的相对变化,可以通过它来观察流量的上升和下降趋势。
注意:当使用Hystrix Board来监控Spring Cloud Zuul构建的API网关时,Thread Pool信息会一直处于Loading状态。这是由于Zuul默认会使用信号量来实现隔离,只有通过Hystrix配置把隔离机制改成为线程池的方式才能够得以展示。