内容来自《Java Web 程序员面试笔试宝典》
【出现频率】★★★☆☆ 【学习难度】★★★☆☆
答案:Hystrix有两种隔离策略:THREAD(线程池隔离)及SEMAPHORE(信号量隔离)。THREAD为官方推荐策略,适合大多数场景。策略设置参数为:
信号量的隔离每次调用线程,当前请求通过计算信号量进行限制,当信号多于最大请求数(maxConcurrentRequests)时,进行限制,调用fallback接口快速返回。信号量的调用是同步的,也就是说,每次调用都会阻塞调用方的线程,直到结果返回。这样就导致了无法对访问做超时(只能依靠调用协议超时,无法主动释放)。
线程池隔离方式,每次都开启一个单独线程运行。它的隔离是通过线程池,即每个隔离粒度都是个线程池,互相不干扰。等于多了一层的保护措施,可以通过Hystrix直接设置超时,超时后直接返回。
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds参数用来设置THREAD策略的超时时间,默认1000ms。