本文共 861 字,大约阅读时间需要 2 分钟。
Hystrix的隔离策略主要有两种:线程隔离和信号量隔离。选择哪种策略取决于具体的使用场景和需求。
线程隔离(THREAD)是一种常用的隔离方式。使用这种方法时,HystrixCommand会在单独的线程上执行,线程池中的线程数量会限制并发请求的数量。在大多数情况下,Hystrix默认使用线程隔离,因为这种方式除了网络超时外,还提供了额外的保护层。
信号量隔离(SEMAPHORE)则相对轻量化。使用这种方式时,HystrixCommand会在调用线程上执行,开销较小,并发请求的数量受信号量的个数限制。通常情况下,只有在负载非常高时(如每个实例每秒调用数百次),才建议使用信号量隔离。这种情况下,线程隔离的开销会较高。需要注意的是,信号量隔离通常不适用于网络调用的隔离。
Hystrix提供了通过commandProperties属性来配置隔离策略。例如,可以在注解中指定如下配置:
@HystrixCommand(fallbackMethod = "stubMyService", commandProperties = { @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE") }) 如果需要传播线程本地上下文到@HystrixCommand,可以通过配置使其在同一线程上执行,避免找不到上下文的运行时异常。例如:
@HystrixCommand(fallbackMethod = "stubMyService", commandProperties = { @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE") }) 总的来说,Hystrix的默认隔离策略是线程隔离,除非有特殊需求,否则无需特别配置。仅在遇到极端高负载场景或需要更高效的资源利用时,才建议考虑信号量隔离。
转载地址:http://purj.baihongyu.com/