All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nepxion.discovery.plugin.strategy.hystrix.context.HystrixContextConcurrencyStrategy Maven / Gradle / Ivy

Go to download

Nepxion Discovery is a solution for Spring Cloud with blue green, gray, weight, limitation, circuit breaker, degrade, isolation, monitor, tracing, dye, failover, async agent

There is a newer version: 6.22.0
Show newest version
package com.nepxion.discovery.plugin.strategy.hystrix.context;

/**
 * 

Title: Nepxion Discovery

*

Description: Nepxion Discovery

*

Copyright: Copyright (c) 2017-2050

*

Company: Nepxion

* @author Haojun Ren * @author Hao Huang * @version 1.0 */ import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import com.nepxion.discovery.plugin.strategy.wrapper.StrategyCallableWrapper; import com.netflix.hystrix.HystrixThreadPoolKey; import com.netflix.hystrix.HystrixThreadPoolProperties; import com.netflix.hystrix.strategy.HystrixPlugins; import com.netflix.hystrix.strategy.concurrency.HystrixConcurrencyStrategy; import com.netflix.hystrix.strategy.concurrency.HystrixRequestVariable; import com.netflix.hystrix.strategy.concurrency.HystrixRequestVariableLifecycle; import com.netflix.hystrix.strategy.eventnotifier.HystrixEventNotifier; import com.netflix.hystrix.strategy.executionhook.HystrixCommandExecutionHook; import com.netflix.hystrix.strategy.metrics.HystrixMetricsPublisher; import com.netflix.hystrix.strategy.properties.HystrixPropertiesStrategy; import com.netflix.hystrix.strategy.properties.HystrixProperty; // 使用线程隔离模式时,无法获取ThreadLocal中信息,自定义并发策略解决 public class HystrixContextConcurrencyStrategy extends HystrixConcurrencyStrategy { @Autowired private StrategyCallableWrapper strategyCallableWrapper; private HystrixConcurrencyStrategy hystrixConcurrencyStrategy; public HystrixContextConcurrencyStrategy() { // HystrixPlugins只能注册一次策略,保留原对象 this.hystrixConcurrencyStrategy = HystrixPlugins.getInstance().getConcurrencyStrategy(); // Keeps references of existing Hystrix plugins. HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins.getInstance().getCommandExecutionHook(); HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance().getEventNotifier(); HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance().getMetricsPublisher(); HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance().getPropertiesStrategy(); HystrixPlugins.reset(); // Registers existing plugins excepts the Concurrent Strategy plugin. HystrixPlugins.getInstance().registerConcurrencyStrategy(this); HystrixPlugins.getInstance().registerCommandExecutionHook(commandExecutionHook); HystrixPlugins.getInstance().registerEventNotifier(eventNotifier); HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher); HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy); } @Override public BlockingQueue getBlockingQueue(int maxQueueSize) { return hystrixConcurrencyStrategy.getBlockingQueue(maxQueueSize); } @Override public HystrixRequestVariable getRequestVariable(HystrixRequestVariableLifecycle rv) { return hystrixConcurrencyStrategy.getRequestVariable(rv); } @Override public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixProperty corePoolSize, HystrixProperty maximumPoolSize, HystrixProperty keepAliveTime, TimeUnit unit, BlockingQueue workQueue) { return hystrixConcurrencyStrategy.getThreadPool(threadPoolKey, corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } @Override public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, HystrixThreadPoolProperties threadPoolProperties) { return hystrixConcurrencyStrategy.getThreadPool(threadPoolKey, threadPoolProperties); } @Override public Callable wrapCallable(Callable callable) { Callable originCallable = hystrixConcurrencyStrategy.wrapCallable(callable); return strategyCallableWrapper.wrapCallable(originCallable); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy