基于Hystrix实现限流
程序员文章站
2022-07-15 13:02:26
...
前言
在微服务治理中,我们常常会遇到依赖接口超时或者调用失败的场景,如果没有对这些异常的场景做补偿会影响用户体验,甚至会导致应用瘫痪,影响其他业务。那如何解决呢?目前业界常用的方案就是熔断和降级两种方式。Hystrix是提供熔断降级的组件,帮助我们解决业务上的困难。下面简单介绍一些Hystrix的一些使用姿势。
hystrix的两种降级方式
- 信号量
- 线程池
下面是信号量降级的使用:
具体参数的含义在注释中。
@HystrixCommand(
groupKey = "timeline-group-rcmd",
fallbackMethod = "callback",
commandProperties = {
@HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"), // 信号量隔离,因为业务方法用了ThreadLocal
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "100"), //超时时间
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value="50"),//触发熔断最小请求数量
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value="30"),//触发熔断的错误占比阈值
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value="3000"),//熔断器回复时间
@HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests", value="300"),// 单机最高并发
@HystrixProperty(name = "fallback.isolation.semaphore.maxConcurrentRequests", value="100")// fallback单机最高并发
}
)
public void call() {
count++;
if(0 == 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
/**
* callback 方法
*/
public void callback() {
System.out.println("callback");
}
上一篇: Hystrix研究-demo01
下一篇: Hystrix的Command初始化