我创建了两个类-ClassA和ClassB。这两个类中的方法均使用@HystrixCommand注释,并带有不同的线程池键。 A类-
@HystrixCommand(threadPoolKey = "execA")
public void callClassB() {
System.out.println("Inside callClassB() Before " + Thread.currentThread().getName());
ClassB b = new ClassB();
b.execute();
System.out.println("Inside callClassB() After" + Thread.currentThread().getName());
}
B级
@HystrixCommand(threadPoolKey = "execB")
public void execute() {
System.out.println("Inside ClassB execute() with thread - " + Thread.currentThread().getName());
for (int i = 0; i < 1000; i++ ) {
}
}
我从Controller调用a.callClassB();其中a是classA的实例。 但是,在日志中,classA和classB都使用相同的线程。
即使在配置中添加了@HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")}
之后,仍在使用同一线程。但是,根据Hystrix文档,如果隔离策略为SEMAPHORE
,则使用同一线程;如果隔离策略为THREAD
,则使用不同的线程