From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 09 六月 2025 11:54:00 +0800 Subject: [PATCH] 6.9新增登录失败冻结逻辑 --- springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/FeignHystrixConcurrencyStrategy.java | 256 +++++++++++++++++++++++++------------------------- 1 files changed, 128 insertions(+), 128 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/FeignHystrixConcurrencyStrategy.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/FeignHystrixConcurrencyStrategy.java index 4ef3646..3b145f9 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/FeignHystrixConcurrencyStrategy.java +++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/FeignHystrixConcurrencyStrategy.java @@ -1,128 +1,128 @@ -//package com.panzhihua.common.utlis; -// -//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; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.stereotype.Component; -//import org.springframework.web.context.request.RequestAttributes; -//import org.springframework.web.context.request.RequestContextHolder; -// -//import java.util.concurrent.BlockingQueue; -//import java.util.concurrent.Callable; -//import java.util.concurrent.ThreadPoolExecutor; -//import java.util.concurrent.TimeUnit; -// -//@Component -//public class FeignHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy { -// -// private static final Logger log = LoggerFactory.getLogger(FeignHystrixConcurrencyStrategy.class); -// -// private HystrixConcurrencyStrategy delegate; -// -// public FeignHystrixConcurrencyStrategy() { -// try { -// this.delegate = HystrixPlugins.getInstance().getConcurrencyStrategy(); -// if (this.delegate instanceof FeignHystrixConcurrencyStrategy) { -// // Welcome to singleton hell... -// return; -// } -// HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins -// .getInstance().getCommandExecutionHook(); -// HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance() -// .getEventNotifier(); -// HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance() -// .getMetricsPublisher(); -// HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance() -// .getPropertiesStrategy(); -// this.logCurrentStateOfHystrixPlugins(eventNotifier, metricsPublisher, -// propertiesStrategy); -// HystrixPlugins.reset(); -// HystrixPlugins.getInstance().registerConcurrencyStrategy(this); -// HystrixPlugins.getInstance() -// .registerCommandExecutionHook(commandExecutionHook); -// HystrixPlugins.getInstance().registerEventNotifier(eventNotifier); -// HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher); -// HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy); -// } -// catch (Exception e) { -// log.error("Failed to register Sleuth Hystrix Concurrency Strategy", e); -// } -// } -// -// private void logCurrentStateOfHystrixPlugins(HystrixEventNotifier eventNotifier, -// HystrixMetricsPublisher metricsPublisher, -// HystrixPropertiesStrategy propertiesStrategy) { -// if (log.isDebugEnabled()) { -// log.debug("Current Hystrix plugins configuration is [" -// + "concurrencyStrategy [" + this.delegate + "]," + "eventNotifier [" -// + eventNotifier + "]," + "metricPublisher [" + metricsPublisher + "]," -// + "propertiesStrategy [" + propertiesStrategy + "]," + "]"); -// log.debug("Registering Sleuth Hystrix Concurrency Strategy."); -// } -// } -// -// @Override -// public <T> Callable<T> wrapCallable(Callable<T> callable) { -// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); -// return new WrappedCallable<>(callable, requestAttributes); -// } -// -// @Override -// public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, -// HystrixProperty<Integer> corePoolSize, -// HystrixProperty<Integer> maximumPoolSize, -// HystrixProperty<Integer> keepAliveTime, TimeUnit unit, -// BlockingQueue<Runnable> workQueue) { -// return this.delegate.getThreadPool(threadPoolKey, corePoolSize, maximumPoolSize, -// keepAliveTime, unit, workQueue); -// } -// -// @Override -// public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, -// HystrixThreadPoolProperties threadPoolProperties) { -// return this.delegate.getThreadPool(threadPoolKey, threadPoolProperties); -// } -// -// @Override -// public BlockingQueue<Runnable> getBlockingQueue(int maxQueueSize) { -// return this.delegate.getBlockingQueue(maxQueueSize); -// } -// -// @Override -// public <T> HystrixRequestVariable<T> getRequestVariable( -// HystrixRequestVariableLifecycle<T> rv) { -// return this.delegate.getRequestVariable(rv); -// } -// -// static class WrappedCallable<T> implements Callable<T> { -// -// private final Callable<T> target; -// private final RequestAttributes requestAttributes; -// -// public WrappedCallable(Callable<T> target, RequestAttributes requestAttributes) { -// this.target = target; -// this.requestAttributes = requestAttributes; -// } -// -// @Override -// public T call() throws Exception { -// try { -// RequestContextHolder.setRequestAttributes(requestAttributes); -// return target.call(); -// } -// finally { -// RequestContextHolder.resetRequestAttributes(); -// } -// } -// } -//} +package com.panzhihua.common.utlis; + +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; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Component +public class FeignHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy { + + private static final Logger log = LoggerFactory.getLogger(FeignHystrixConcurrencyStrategy.class); + + private HystrixConcurrencyStrategy delegate; + + public FeignHystrixConcurrencyStrategy() { + try { + this.delegate = HystrixPlugins.getInstance().getConcurrencyStrategy(); + if (this.delegate instanceof FeignHystrixConcurrencyStrategy) { + // Welcome to singleton hell... + return; + } + HystrixCommandExecutionHook commandExecutionHook = HystrixPlugins + .getInstance().getCommandExecutionHook(); + HystrixEventNotifier eventNotifier = HystrixPlugins.getInstance() + .getEventNotifier(); + HystrixMetricsPublisher metricsPublisher = HystrixPlugins.getInstance() + .getMetricsPublisher(); + HystrixPropertiesStrategy propertiesStrategy = HystrixPlugins.getInstance() + .getPropertiesStrategy(); + this.logCurrentStateOfHystrixPlugins(eventNotifier, metricsPublisher, + propertiesStrategy); + HystrixPlugins.reset(); + HystrixPlugins.getInstance().registerConcurrencyStrategy(this); + HystrixPlugins.getInstance() + .registerCommandExecutionHook(commandExecutionHook); + HystrixPlugins.getInstance().registerEventNotifier(eventNotifier); + HystrixPlugins.getInstance().registerMetricsPublisher(metricsPublisher); + HystrixPlugins.getInstance().registerPropertiesStrategy(propertiesStrategy); + } + catch (Exception e) { + log.error("Failed to register Sleuth Hystrix Concurrency Strategy", e); + } + } + + private void logCurrentStateOfHystrixPlugins(HystrixEventNotifier eventNotifier, + HystrixMetricsPublisher metricsPublisher, + HystrixPropertiesStrategy propertiesStrategy) { + if (log.isDebugEnabled()) { + log.debug("Current Hystrix plugins configuration is [" + + "concurrencyStrategy [" + this.delegate + "]," + "eventNotifier [" + + eventNotifier + "]," + "metricPublisher [" + metricsPublisher + "]," + + "propertiesStrategy [" + propertiesStrategy + "]," + "]"); + log.debug("Registering Sleuth Hystrix Concurrency Strategy."); + } + } + + @Override + public <T> Callable<T> wrapCallable(Callable<T> callable) { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + return new WrappedCallable<>(callable, requestAttributes); + } + + @Override + public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, + HystrixProperty<Integer> corePoolSize, + HystrixProperty<Integer> maximumPoolSize, + HystrixProperty<Integer> keepAliveTime, TimeUnit unit, + BlockingQueue<Runnable> workQueue) { + return this.delegate.getThreadPool(threadPoolKey, corePoolSize, maximumPoolSize, + keepAliveTime, unit, workQueue); + } + + @Override + public ThreadPoolExecutor getThreadPool(HystrixThreadPoolKey threadPoolKey, + HystrixThreadPoolProperties threadPoolProperties) { + return this.delegate.getThreadPool(threadPoolKey, threadPoolProperties); + } + + @Override + public BlockingQueue<Runnable> getBlockingQueue(int maxQueueSize) { + return this.delegate.getBlockingQueue(maxQueueSize); + } + + @Override + public <T> HystrixRequestVariable<T> getRequestVariable( + HystrixRequestVariableLifecycle<T> rv) { + return this.delegate.getRequestVariable(rv); + } + + static class WrappedCallable<T> implements Callable<T> { + + private final Callable<T> target; + private final RequestAttributes requestAttributes; + + public WrappedCallable(Callable<T> target, RequestAttributes requestAttributes) { + this.target = target; + this.requestAttributes = requestAttributes; + } + + @Override + public T call() throws Exception { + try { + RequestContextHolder.setRequestAttributes(requestAttributes); + return target.call(); + } + finally { + RequestContextHolder.resetRequestAttributes(); + } + } + } +} -- Gitblit v1.7.1