目录
1.Hystrix作用
在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很常见的。
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提供故障时的 fallback 降级机制。
总而言之,Hystrix 通过这些方法帮助我们提升分布式系统的可用性和稳定性。
2.yml配置
# 开启Feign下面的Hystrix功能 feign.hystrix.enabled=true # 是否开启服务降级 hystrix.command.default.fallback.enabled=true
熔断判断:
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=20000 # 熔断的前提条件(请求的数量),在一定的时间窗口内,请求达到5个以后,才开始进行熔断判断 hystrix.command.default.circuitBreaker.requestVolumeThreshold=5 # 超过50%的失败请求,则熔断开关开启 hystrix.command.default.circuitBreaker.errorThresholdPercentage=50 # 当熔断开启以后,经过多少秒再进入半开状态 hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=15000
超时判断:
# 全局超时 hystrix.command.default.execution.timeout.enabled=true # 超时时间 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=1000 # 超时以后终止线程 hystrix.command.default.execution.isolation.thread.interruptOnTimeout=true # 取消的时候终止线程 hystrix.command.default.execution.isolation.thread.interruptOnFutureCancel=true # 特定方法的超时设置 hystrix.command.MyService#retry(int).execution.isolation.thread.timeoutInMilliseconds=3000
3.注解
1.启动类添加@EnableCircuitBreaker
2.熔断方法添加@HystrixCommand(fallbackMethod = "熔断后调用的方法")
4.request_cache
hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销。要使用该功能必须管理HystrixRequestContext,如果请求B要用到请求A的结果缓存,A和B必须同处一个context。通过HystrixRequestContext.initializeContext()和context.shutdown()可以构建一个context,这两条语句间的所有请求都处于同一个context,当然这个管理过程可以通过自定义的filter来实现,相当于一个thradlocal
1.生成同一个上下文
@Cleanup HystrixRequestContext context = HystrixRequestContext.initializeContext();
2.添加两个注解
@CacheResult添加在方法上
@CacheKey添加在键上
3.指定commandKey
@HystrixCommand(commandKey = "cacheKey")
4.除了第一次调用之外,其他的都是走缓存;
5.HystrixCommand详解
HystrixCommand配置参数详解 · JeecgBoot 开发文档 · 看云
6.常见的降级策略
1.富文本 返回最近的一次快照信息;
2.图片 返回主图,可以对主图进行备份;
3.评论等,直接返回空;
参考: