一、pom依赖(略)
参考上一篇文章
二、启动类添加注解(略)
参考上一篇文章
三、创建OderCommand和UserCommand类
public class OrderCommand extends HystrixCommand<String> {
private String value;
public OrderCommand(String value) {
super(Setter.withGroupKey(
//服务分组
HystrixCommandGroupKey.Factory.asKey("OrderGroup"))
//线程分组
.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("OrderPool"))
//线程池配置
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withCoreSize(10)
.withKeepAliveTimeMinutes(5)
.withMaxQueueSize(10)
.withQueueSizeRejectionThreshold(10000))
.andCommandPropertiesDefaults( HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD)));
this.value = value;
}
protected String run() throws Exception {
String threadName = Thread.currentThread().getName();
return threadName + " || " + value;
}
public class UserCommand extends HystrixCommand<String> {
private String value;
public UserCommand(String value) {
super(Setter.withGroupKey(
//服务分组
HystrixCommandGroupKey.Factory.asKey("UserGroup"))
//线程分组
.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("UserPool"))
//线程池配置
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()
.withCoreSize(10)
.withKeepAliveTimeMinutes(5)
.withMaxQueueSize(10)
.withQueueSizeRejectionThreshold(10000))
.andCommandPropertiesDefaults( HystrixCommandProperties.Setter()
.withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD)));
this.value = value;
}
protected String run() throws Exception {
String threadName = Thread.currentThread().getName();
return threadName + " || " + value;
}
四、OrderService
@Service
public class OrderSercice {
public String testPool() throws ExecutionException, InterruptedException {
UserCommand userCommand = new UserCommand("库里");
OrderCommand orderCommand1 = new OrderCommand("篮球");
OrderCommand orderCommand2 = new OrderCommand("足球");
//同步调用
String val1 = userCommand.execute();
String val2 = orderCommand1.execute();
String val3 = orderCommand2.execute();
//异步调用
/* Future<String> f1 = userCommand.queue();
Future<String> f2 = orderCommand1.queue();
Future<String> f3 = orderCommand2.queue();*/
return "val1="+val1+",val2="+val2+",val3="+val3;
//return "f1="+f1.get()+",f2="+f2.get()+",f3="+f3.get();
}
}
四、Controller
@RestController
public class OrderController {
@RequestMapping("/pool")
public String pool() throws ExecutionException, InterruptedException {
return orderSercice.testPool();
}
}
五、总结
依赖隔离,主要是通过线程池了做隔离。