Hystrix通过第三方(一般来源网络)的调用,给与保护和控制延迟和失败。在复杂的分布式系统中复制级联失败。快速失败和修复。在可能的情况下,回滚挥着优雅的失败。实现几乎实时监控,警报和操作控制。
下面就是Hystrix是怎么来实现熔断,服务降级这些的,用注解实现
@HystrixCommand(fallbackMethod ="getEmperror",commandProperties = {
//等待时间
@HystrixProperty(name ="timeDelayInMillseconds",value ="100"),
//每个批处理最大的请求数
@HystrixProperty(name ="maxRequestsInBatch",value ="20"),
//不要开启请求缓存。这个功能就是个毫无意义的功能。
@HystrixProperty(name ="requestCacheEnabled",value ="false"),
//超时策略,本来默认的超时策略是true的现在策略是false,就表示超时策略不起作用了
@HystrixProperty(name ="execution.timeout.enabled",value ="true"),
//该属性用来配置当 HystrixCommand.run()执行超时的时候是否要将它中断。默认的是掐断,
@HystrixProperty(name ="execution.isolation.thread.interruptOnTimeout",value ="true"),
//该属性用来配置当 HystrixCommand.run()执行被取消的时候是否要将它中断。注意这里是执行被取消
@HystrixProperty(name ="execution.isolation.thread.interruptOnCancel",value ="true"),
//属性用来 设置从调用线程中允许HystrixCommand.getFallback()方法执行的最大并发请求数。
// 当达到最大并发请求数时,后续的请求将会被拒绝并抛出异常。这里默认的是40个
@HystrixProperty(name ="fallback.isolation.semaphore.maxConcurrentRequests",value ="40"),
//该属性用来设置服务降级策略是否启用, 如果设置为false,
// 那么当请求失败或者拒绝发生时, 将不会调用HystrixCommand.getFallback() 来执行服务降级逻辑。
@HystrixProperty(name ="fallback. enabled",value ="true"),
//该属性用来确定当服务请求命令失败时, 是否使用 断路器来跟踪其健康指标和熔断请求
@HystrixProperty(name ="circuitBreaker.enabled",value ="true"),
//该属性用来设置在滚动时间窗 中,断路器熔断的最小请求数。
// 意思是本来有50个请求,(10秒的滚动时间窗中)但是只有29个请求失败了有21个请求成功了,
// 这也不会开启熔断的,因为没达到30个。
@HystrixProperty(name ="circuitBreaker.requestVolumeThreshold",value ="30"),
//该属性用来设置当断路器 打开之后的休眠时间窗。 休眠时间窗结束之后,会将断路器置为 “半开” 状态,尝试熔断的请求命令,
// 如果依然失败就将断路器继续设置为 “打开” 状态,如果成功 就设置为 “关闭” 状态。(复活赛)
@HystrixProperty(name ="circuitBreaker.sleepWindowinMilliseconds",value ="4000"),//默认是5000ms
// 该属性用来设置断路器打开 的错误百分比条件。
// 例如,默认值为 50 的情况下,表示在滚动时间窗中,在请求 数量超过circuitBreaker.reques七VolumeThreshold阅值的前提下,
// 如果 错误请求数的百分比超过50, 就把断路器设置为 “打开” 状态, 否则就设置为 “关 闭 ” 状态。
@HystrixProperty(name ="circuitBreaker.errorThresholdPercentage",value ="50"),
//circuitBreaker.forceOpen: 如果将该属性设置为 true, 断路器将强制进入“打 开” 状态, 它会拒绝所有请求。
// 该属性优先于 circuitBreaker.forceClosed 属性。
@HystrixProperty(name ="circuitBreaker.forceOpen",value ="false"),
//circuitBreaker.forceClosed: 如果将该属性设置为 true, 断路器将强制进入 “关闭” 状态, 它会接收所有请求。
// 如果 circuitBreaker.forceOpen 属性为 true, 该属性不会生效。
// (!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
@HystrixProperty(name ="circuitBreaker.forceClosed",value ="true"),
//etrics.rollingStats.timeinMilliseconds: 该属性用来设置滚动时间窗 的长度,
// 单位为毫秒。 该时间用于断路器判断健康度时需要收集信息的持续时间。
// 断路器在收集指标信息的时候会根据设置的时间窗长度拆分成多个 “ 桶” 来累计各 度量值, 每个 “ 桶” 记录了一段时间内的采集指标。
// 例如, 当采用默认值10000毫 秒时, 断路器默认将其拆分成10个桶(桶的数量也可通过metrics.rollingStats.numBuckets参数设置),
// 每个桶记录1000毫秒内的指标信息。
@HystrixProperty(name ="etrics.rollingStats.timeinMilliseconds",value ="10000"),
//metrics.rollingstats.numBuckets: 该属性用来设置滚动时间窗统计指标 信息时划分 “ 桶” 的数量
//注意!!!这个桶的数量要和上面的滚动时间是整除关系
@HystrixProperty(name ="metrics.rollingstats.numBuckets",value ="10"),
//metrics.rollingPercente.enabled: 该属性用来设置对命令执行的延迟 是否使用百分位数来跟踪和计算。
// 如果设置为false, 那么所有的概要统计都将返回 -1。
@HystrixProperty(name ="metrics.rollingPercente.enabled",value ="false"),
//metrics.rollingPercentile.timeinMilliseconds: 该属性用来设置百分 位统计的滚动窗口的持续时间, 单位为毫秒
//这个默认值为60000
@HystrixProperty(name ="metrics.rollingPercentile.timeinMilliseconds",value ="20000"),
//metrics.rollingPercentile.numBuckets: 该属性用来设置百分位统计滚 动窗口中使用 “桶 ”的数量。
//这里的默认值是6
//注意!!上面两者同时要保持以种整除关系
@HystrixProperty(name ="metrics.rollingPercentile.numBuckets",value ="2"),
//metrics.rollingPercentile.bucketSize: 该属性用来设置在执行过程中 每个 “桶 ” 中保留的最大执行次数。
// 如果在滚动时间窗内发生超过该设定值的执行次数, 就从最初的位置开始重写。
// 例如, 将该值设置为100, 滚动窗口为10秒, 若 在10秒内一个 “桶” 中发生了500次执行,
// 那么该 “桶” 中只保留 最后的100次执 行的统计。 另外, 增加该值的大小将会增加内存量的消耗,
// 并增加排序百分位数所 需的计算时间。
@HystrixProperty(name ="metrics.rollingPercentile.bucketSize",value ="100"),//这里的默认值也是100
//metrics.healthSnapshot.intervalinMilliseconds: 该属性用来设置采 集影响断路器状态的健康快照(请求的成功、 错误百分比)的间隔等待时间。
@HystrixProperty(name ="metrics.healthSnapshot.intervalinMilliseconds",value ="600"),//默认是500
//线程池的最大队列长度。
@HystrixProperty(name ="coreSize",value ="20"),
//队列最大拒绝阈值,没有达到队列最大值,也能拒绝。
@HystrixProperty(name ="maxQueueSize",value ="-1"),
@HystrixProperty(name ="queueSizeRejectionThreshold",value ="5")