8-20 Hystrix线程隔离参数解析及演示
下面我们就来看几个核心参数。下面三个标红的
设置为2,后面好演示。
复制一下我们之前的代码
复制到最下面改名字:threadTest
分别都是创建5个
切换到线程隔离
现在我们线程里面有2个线程,但是要执行5个。报错的应该是线程池内容不够这种错误。
运行测试方法
线程池的最大数量设置为5
这么设置完成后,再次执行测试方法还是原来那个错误
它必须有个参数和它一起匹配使用alllowMaximumToDivergeFromCoreSize
我们把它设置为true。默认值是false
再来运行测试方法
五次都执行了。
最大线程数量改成3
再次执行
依然报错了。因为要运行的线程是5个
设置等待队列,比如设置为2。最大线程是3,等待队列是2,加起来就是5 。
运行测试
这里的错误并不是你的线程数不够,而是TimeoutException
一共有5个线程,主线程是2个,最大可允许多1个,队列等待是2.
出现错误的原因是因为这里我们让它休眠了800毫秒。hytrix默认的超时时间是1秒。所以我有三个线程在执行,他们三个无论是谁,都至少800毫秒,然后紧接着我们还有2个等待的,当我前三个处理完,空出来两个位置,这2个等待的才能进去执行,等待的这两个本身已经等待了800毫秒了。他们自己又要执行800毫秒,那么它至少要执行1600毫秒。也就是1秒6,所以它最后报的错误是timeoutException
我们把休眠注释掉。理论上就应该不再报错 了。
如果还是想休眠,那么就要把超时时间增大
先开启下面这个
再设置超时时间
结束