如何设置Hystrix线程池大小?

在压测FeignClient接口时候,发现FeignClient接口处理请求的能力和Hystrix为其提供的线程池大小有关。

测试代码:

@FeignClient (value="service-provider", fallbackFactory= providerServiceFallbackFactory.class)

public interface testService {

@RequestMapping(value="/v1/test",method= RequestMethod.POST)

Result test(@RequestBody TestEntity testEntity);

}

并发测试后异常:

Task java.util.concurrent.FutureTask@27d69e27 rejected from java.util.concurrent.ThreadPoolExecutor@61d1c14e[Running, pool size = 10, active threads = 10, queued tasks = 0, completed tasks = 62058]


原因分析:

1. 并发数太大,触发了熔断。

2. 熔断原因和ThreadPoolExecutor有关,并且提示pool size是10,线程池满了,无法提交任务。


查看Hystrix官方文档:

Hystrix使用舱壁模式(bulkhead pattern)隔离每个依赖,从而限制对依赖的并发访问。

如何设置Hystrix线程池大小?_第1张图片

客户端(库,网络请求等等)运行在不同的线程。这使它们独立于请求线程(Tomcat线程池),因此请求线程可以在依赖线程花费时间太长时,摆脱此依赖线程。

Hystrix为每个依赖提供一个小的线程池(或信号)(默认10个线程),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。

如何设置Hystrix线程池大小?_第2张图片

可以通过设置依赖线程池默认大小,提高并发处理能力。在application.yml里面:

hystrix:

   threadpool:

       service-provider:

           coreSize:  100

你可能感兴趣的:(如何设置Hystrix线程池大小?)