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); } }