- 添加starter
- 添加@EnableCircuitBreaker
-
注解方式使用Hystrix
1. 熔断
2. fallback降级
3. 舱壁模式
CodeRepo/UseHystrixCommandAnnotation.java at main · 4rnold/CodeRepo编码方式使用Hystrix
定义HystrixCommand【使用线程池隔离】,HystrixObservableCommand【使用信号量隔离】
CodeRepo/NacosClientHystrixCommand.java at main · 4rnold/CodeRepo
使用HystrixCommand
四种方式 同步阻塞,execute()
- 异步非阻塞,queue()
- 热响应调用(启动线程没有执行),observe()
- 冷响应调用,toObservable()
CodeRepo/HystrixController.java at main · 4rnold/CodeRepo
Hystrix缓存
- CodeRepo/CacheHystrixCommandAnnotation.java at main · 4rnold/CodeRepo
CodeRepo/CacheHystrixCommand.java at main · 4rnold/CodeRepo
Hystrix异常
Hystrix隔离策略
execution.isolation.strategy
THREAD ——默认值 在固定大小线程池中,以单独线程执行,并发请求数受限于线程池大小。
- 线程隔离(使用新的线程执行任务)
- SEMAPHORE —— 在调用线程中执行,通过信号量来限制并发量。
- 信号量(单机内部,线程不变)
排除Exception
@HystrixCommand(fallbackMethod = “error”, ignoreExceptions = ArithmeticException.class)
Hystrix合并请求
代码方式的请求合并:
CodeRepo/NacosClientCollapseCommand.java at main · 4rnold/CodeRepo
queueSizeRejectionThreshold
hystrix:
threadpool:
default:
coreSize: 200 #并发执行的最大线程数,默认10
maxQueueSize: 1000 #BlockingQueue的最大队列数,默认值-1
queueSizeRejectionThreshold: 800 #即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
hystrix提供了queueSizeRejectionThreshold属性(hystrix.threadpool.default.queueSizeRejectionThreshold)来动态控制线程池队列的上限,而线程池本身队列的大小,则是由maxQueueSize属性(hystrix.threadpool.default.maxQueueSize)来决定,默认为-1,创建的队列是SynchronousQueue,如果设置大于0则根据其大小创建LinkedBlockingQueue。