SpringCloud学习之Hystrix(依赖隔离)

一、pom依赖(略)

参考上一篇文章

二、启动类添加注解(略)

参考上一篇文章

三、创建OderCommand和UserCommand类

public class OrderCommand extends HystrixCommand {

    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 {

    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 f1 = userCommand.queue();
        Future f2 = orderCommand1.queue();
        Future 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();
    }
}

五、总结

依赖隔离,主要是通过线程池了做隔离。

你可能感兴趣的:(SpringCloud)