8 高并发解决方案

2023年4月26日09:16:54

 8.1 高并发问题分析

 

 8.2 代码实现

package xx.study.sc.command;

import com.netflix.hystrix.*;
import org.springframework.web.client.RestTemplate;
import xx.study.sc.model.Product;

public class OrderCommand extends HystrixCommand<Product> {

    private RestTemplate restTemplate;
    private Long id;

    public OrderCommand(RestTemplate restTemplate,Long id){
        super(setter());
        this.restTemplate=restTemplate;
        this.id=id;

    }
    private static Setter setter(){
        //服务分组
        HystrixCommandGroupKey groupKey=HystrixCommandGroupKey.Factory.asKey("order_product");
        //服务标识
        HystrixCommandKey commandKey=HystrixCommandKey.Factory.asKey("product");
        //线程池名称
        HystrixThreadPoolKey threadPoolKey=HystrixThreadPoolKey.Factory.asKey("order_produt_pool");

        /**
         * 线程池配置
         * withCoreSize :线程池大小
         * withKeepAliveTimeMinutes:线程存活时间15s
         * withQueueSizeRejectionThreshold:队列等待的阈值为100,超过100执行拒绝策略
         */
        HystrixThreadPoolProperties.Setter threadPoolProperties=HystrixThreadPoolProperties.Setter().withCoreSize(50).
                withKeepAliveTimeMinutes(15).withQueueSizeRejectionThreshold(100);
        //命令属性配置Hystrix开启超时
        HystrixCommandProperties.Setter commandProperties=HystrixCommandProperties.Setter().
                //采用线程池隔离
                withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD)
                .withExecutionTimeoutEnabled(false);
        return Setter.withGroupKey(groupKey).andCommandKey(commandKey).andThreadPoolKey(threadPoolKey)
                .andThreadPoolPropertiesDefaults(threadPoolProperties).andCommandPropertiesDefaults(commandProperties);






    }


    @Override
    protected Product run() throws Exception {
        return restTemplate.getForObject("http://127.0.0.1:9000/product/buy",Product.class);
    }
}

 

  • 作者:码灵
  • 原文链接:https://maling.blog.csdn.net/article/details/106981147
    更新时间:2023年4月26日09:16:54 ,共 1523 字。