diff --git a/pom.xml b/pom.xml index 65e65cb9..6cc5c656 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ cn.springcloud.gray spring-cloud-gray pom - A.1.0.1 + A.1.0.3 https://github.com/SpringCloud/spring-cloud-gray Spring Cloud中国社区 @@ -225,6 +225,35 @@ spring-boot:run + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar-no-fork + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + package + + jar + + + + + org.apache.maven.plugins maven-compiler-plugin @@ -252,34 +281,6 @@ sonatype-oss-release - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - package - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - package - - jar - - - - org.apache.maven.plugins diff --git a/spring-cloud-gray-client-netflix/pom.xml b/spring-cloud-gray-client-netflix/pom.xml index 3610ffd5..f532cfa3 100644 --- a/spring-cloud-gray-client-netflix/pom.xml +++ b/spring-cloud-gray-client-netflix/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/HystrixGrayAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/HystrixGrayAutoConfiguration.java index cd3ce435..13edf63d 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/HystrixGrayAutoConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/HystrixGrayAutoConfiguration.java @@ -9,6 +9,7 @@ import feign.hystrix.HystrixFeign; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -16,6 +17,7 @@ @Configuration @ConditionalOnBean(GrayManager.class) @ConditionalOnClass({HystrixCommand.class, HystrixFeign.class}) +@ConditionalOnProperty(value = "gray.hystrix.enabled") @Import(HystrixGrayTrackWebConfiguration.class) public class HystrixGrayAutoConfiguration { @@ -32,7 +34,7 @@ public RequestLocalStorage requestLocalStorage() { * @return DefaultHystrixRibbonConnectionPoint */ @Bean - public RibbonConnectionPoint hystrixRibbonConnectionPoint( + public RibbonConnectionPoint ribbonConnectionPoint( GrayManager grayManager, RequestLocalStorage requestLocalStorage) { return new DefaultHystrixRibbonConnectionPoint(grayManager, requestLocalStorage); } diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixGrayAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixRibbonGrayAutoConfiguration.java similarity index 95% rename from spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixGrayAutoConfiguration.java rename to spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixRibbonGrayAutoConfiguration.java index bfa695e7..469d71fa 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixGrayAutoConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/NetflixRibbonGrayAutoConfiguration.java @@ -14,7 +14,7 @@ @Configuration @ConditionalOnBean(GrayManager.class) @RibbonClients(defaultConfiguration = GrayRibbonClientsConfiguration.class) -public class NetflixGrayAutoConfiguration { +public class NetflixRibbonGrayAutoConfiguration { @Bean diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignAutoConfiguration.java index 31ad5bf3..0fcd2818 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignAutoConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignAutoConfiguration.java @@ -1,7 +1,6 @@ package cn.springcloud.gray.client.netflix.feign.configuration; import cn.springcloud.gray.GrayManager; -import cn.springcloud.gray.client.netflix.configuration.HystrixGrayAutoConfiguration; import cn.springcloud.gray.client.netflix.feign.GrayTrackFeignRequestInterceptor; import cn.springcloud.gray.request.RequestLocalStorage; import com.netflix.loadbalancer.ILoadBalancer; @@ -41,10 +40,4 @@ public GrayTrackFeignRequestInterceptor grayTrackFeignRequestInterceptor(Request } - @Configuration - @ConditionalOnProperty(value = "feign.hystrix.enabled") - public static class HystrixConfiguration extends HystrixGrayAutoConfiguration { - - } - } diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignClientsConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignClientsConfiguration.java index ccec4ad5..cbeb290b 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignClientsConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/feign/configuration/GrayFeignClientsConfiguration.java @@ -15,12 +15,10 @@ public class GrayFeignClientsConfiguration { @Autowired private Client feignClient; @Autowired - private RibbonConnectionPoint ribbonConnectionPoint; - @Autowired private GrayRequestProperties grayRequestProperties; @Bean - public Client getFeignClient() { + public Client getFeignClient(RibbonConnectionPoint ribbonConnectionPoint) { return new GrayFeignClient(feignClient, ribbonConnectionPoint, grayRequestProperties); } diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/GrayLoadBalanceRule.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/GrayLoadBalanceRule.java index 8dab424e..6a4ca105 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/GrayLoadBalanceRule.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/GrayLoadBalanceRule.java @@ -1,7 +1,7 @@ package cn.springcloud.gray.client.netflix.ribbon; +import cn.springcloud.gray.GrayClientHolder; import cn.springcloud.gray.GrayManager; -import cn.springcloud.gray.client.netflix.GrayClientHolder; import cn.springcloud.gray.model.GrayService; import cn.springcloud.gray.request.GrayRequest; import cn.springcloud.gray.request.RequestLocalStorage; diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/configuration/GrayRibbonClientsConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/configuration/GrayRibbonClientsConfiguration.java index 3d7d07d2..e5cd1015 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/configuration/GrayRibbonClientsConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/ribbon/configuration/GrayRibbonClientsConfiguration.java @@ -1,40 +1,28 @@ package cn.springcloud.gray.client.netflix.ribbon.configuration; import cn.springcloud.gray.GrayManager; -import cn.springcloud.gray.client.netflix.GrayClientHolder; import cn.springcloud.gray.client.netflix.ribbon.GrayLoadBalanceRule; -import cn.springcloud.gray.servernode.ServerExplainer; import cn.springcloud.gray.request.RequestLocalStorage; +import cn.springcloud.gray.servernode.ServerExplainer; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.Server; -import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration -public class GrayRibbonClientsConfiguration implements InitializingBean { - - @Autowired - private GrayManager grayManager; - @Autowired - private RequestLocalStorage requestLocalStorage; - @Autowired - private ServerExplainer serverExplainer; +public class GrayRibbonClientsConfiguration { @Bean - public IRule ribbonRule(@Autowired(required = false) IClientConfig config) { + public IRule ribbonRule( + @Autowired(required = false) IClientConfig config, + GrayManager grayManager, + RequestLocalStorage requestLocalStorage, + ServerExplainer serverExplainer) { GrayLoadBalanceRule rule = new GrayLoadBalanceRule(grayManager, requestLocalStorage, serverExplainer); rule.initWithNiwsConfig(config); return rule; } - - @Override - public void afterPropertiesSet() throws Exception { - GrayClientHolder.setGrayManager(grayManager); - GrayClientHolder.setRequestLocalStorage(requestLocalStorage); - GrayClientHolder.setServerExplainer(serverExplainer); - } } diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/zuul/configuration/GrayZuulAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/zuul/configuration/GrayZuulAutoConfiguration.java index c0afad93..de1b88a3 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/zuul/configuration/GrayZuulAutoConfiguration.java +++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/zuul/configuration/GrayZuulAutoConfiguration.java @@ -2,7 +2,6 @@ import cn.springcloud.gray.GrayManager; import cn.springcloud.gray.client.config.properties.GrayRequestProperties; -import cn.springcloud.gray.client.netflix.configuration.HystrixGrayAutoConfiguration; import cn.springcloud.gray.client.netflix.connectionpoint.RibbonConnectionPoint; import cn.springcloud.gray.client.netflix.zuul.GrayPostZuulFilter; import cn.springcloud.gray.client.netflix.zuul.GrayPreZuulFilter; @@ -48,11 +47,4 @@ public ZuulRequestInterceptor zuulRequestInterceptor() { } - - @Configuration - @ConditionalOnProperty(value = "zuul.ribbonIsolationStrategy", havingValue = "THREAD") - public static class HystrixConfiguration extends HystrixGrayAutoConfiguration { - - } - } diff --git a/spring-cloud-gray-client/pom.xml b/spring-cloud-gray-client/pom.xml index b0945dec..f9974e4c 100644 --- a/spring-cloud-gray-client/pom.xml +++ b/spring-cloud-gray-client/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractCommunicableGrayManager.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractCommunicableGrayManager.java index b915c3db..dcaa6a21 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractCommunicableGrayManager.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractCommunicableGrayManager.java @@ -3,17 +3,16 @@ import cn.springcloud.gray.communication.InformationClient; import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper; -import java.util.List; - public abstract class AbstractCommunicableGrayManager extends SimpleGrayManager implements CommunicableGrayManager { private GrayClientConfig grayClientConfig; private InformationClient informationClient; public AbstractCommunicableGrayManager( - GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, - List requestInterceptors, InformationClient informationClient) { - super(grayDecisionFactoryKeeper, requestInterceptors); + GrayClientConfig grayClientConfig, + GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, + InformationClient informationClient) { + super(grayDecisionFactoryKeeper); this.grayClientConfig = grayClientConfig; this.informationClient = informationClient; } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractGrayManager.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractGrayManager.java index c14e5e3e..03b5e305 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractGrayManager.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractGrayManager.java @@ -1,9 +1,8 @@ package cn.springcloud.gray; import cn.springcloud.gray.decision.GrayDecision; -import cn.springcloud.gray.decision.MultiGrayDecision; -import cn.springcloud.gray.decision.factory.GrayDecisionFactory; import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper; +import cn.springcloud.gray.decision.MultiGrayDecision; import cn.springcloud.gray.model.DecisionDefinition; import cn.springcloud.gray.model.GrayInstance; import cn.springcloud.gray.model.PolicyDefinition; @@ -26,11 +25,11 @@ public abstract class AbstractGrayManager implements GrayManager { private GrayDecisionFactoryKeeper grayDecisionFactoryKeeper; private Map> requestInterceptors = new HashMap<>(); + private List communalRequestInterceptors = ListUtils.EMPTY_LIST; public AbstractGrayManager( - GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List requestInterceptors) { - initRequestInterceptors(requestInterceptors); + GrayDecisionFactoryKeeper grayDecisionFactoryKeeper) { this.grayDecisionFactoryKeeper = grayDecisionFactoryKeeper; } @@ -39,7 +38,7 @@ public AbstractGrayManager( public List getRequeestInterceptors(String interceptroType) { List list = requestInterceptors.get(interceptroType); if (list == null) { - return ListUtils.EMPTY_LIST; + return communalRequestInterceptors; } return list; } @@ -78,31 +77,35 @@ private GrayDecision createGrayDecision(PolicyDefinition policyDefinition) { } - private void initRequestInterceptors(List requestInterceptors) { - if (requestInterceptors == null || requestInterceptors.isEmpty()) { - return; - } + public void setRequestInterceptors(Collection requestInterceptors) { + Map> requestInterceptorMap = new HashMap<>(); List all = new ArrayList<>(); - for (RequestInterceptor interceptor : requestInterceptors) { - if (StringUtils.equals(interceptor.interceptroType(), "all")) { - all.add(interceptor); - } else { - List interceptors = this.requestInterceptors.get(interceptor.interceptroType()); - if (interceptors == null) { - interceptors = new ArrayList<>(); - this.requestInterceptors.put(interceptor.interceptroType(), interceptors); + if (CollectionUtils.isNotEmpty(requestInterceptors)) { + for (RequestInterceptor interceptor : requestInterceptors) { + if (StringUtils.equals(interceptor.interceptroType(), "all")) { + all.add(interceptor); + } else { + List interceptors = requestInterceptorMap.get(interceptor.interceptroType()); + if (interceptors == null) { + interceptors = new ArrayList<>(); + requestInterceptorMap.put(interceptor.interceptroType(), interceptors); + } + interceptors.add(interceptor); } - interceptors.add(interceptor); } + putTypeAllTo(requestInterceptorMap, all); + this.communalRequestInterceptors = all; } - putTypeAllTo(all); + this.communalRequestInterceptors = all; + this.requestInterceptors = requestInterceptorMap; + } - private void putTypeAllTo(List all) { + private void putTypeAllTo(Map> requestInterceptorMap, List all) { if (all.isEmpty()) { return; } - requestInterceptors.values().forEach(list -> { + requestInterceptorMap.values().forEach(list -> { list.addAll(all); OrderComparator.sort(list); }); diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java index 9e6c14a4..634c5cae 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java @@ -24,13 +24,24 @@ public DefaultGrayManager( GrayClientConfig grayClientConfig, GrayLoadProperties grayLoadProperties, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, - List requestInterceptors, InformationClient informationClient) { - super(grayClientConfig, grayDecisionFactoryKeeper, requestInterceptors, informationClient); + super(grayClientConfig, grayDecisionFactoryKeeper, informationClient); this.grayLoadProperties = grayLoadProperties; +// openForWork(); + } + + @Override + public void setup() { + super.setup(); openForWork(); } + @Override + public void shutdown() { + super.shutdown(); + updateTimer.cancel(); + } + public void openForWork() { log.info("拉取灰度列表"); if (getGrayInformationClient() != null) { diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/GrayClientHolder.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientHolder.java similarity index 68% rename from spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/GrayClientHolder.java rename to spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientHolder.java index 3635a545..0ff9a937 100644 --- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/GrayClientHolder.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientHolder.java @@ -1,15 +1,13 @@ -package cn.springcloud.gray.client.netflix; +package cn.springcloud.gray; -import cn.springcloud.gray.GrayManager; -import cn.springcloud.gray.servernode.ServerExplainer; import cn.springcloud.gray.request.RequestLocalStorage; -import com.netflix.loadbalancer.Server; +import cn.springcloud.gray.servernode.ServerExplainer; public class GrayClientHolder { private static GrayManager grayManager; private static RequestLocalStorage requestLocalStorage; - private static ServerExplainer serverExplainer; + private static ServerExplainer serverExplainer; public static GrayManager getGrayManager() { return grayManager; @@ -27,11 +25,11 @@ public static void setRequestLocalStorage(RequestLocalStorage requestLocalStorag GrayClientHolder.requestLocalStorage = requestLocalStorage; } - public static ServerExplainer getServerExplainer() { - return serverExplainer; + public static ServerExplainer getServerExplainer() { + return (ServerExplainer) serverExplainer; } - public static void setServerExplainer(ServerExplainer serverExplainer) { + public static void setServerExplainer(ServerExplainer serverExplainer) { GrayClientHolder.serverExplainer = serverExplainer; } } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientInitializer.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientInitializer.java new file mode 100644 index 00000000..9a284581 --- /dev/null +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientInitializer.java @@ -0,0 +1,59 @@ +package cn.springcloud.gray; + +import cn.springcloud.gray.request.RequestLocalStorage; +import cn.springcloud.gray.servernode.ServerExplainer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +import java.util.Map; + +@Slf4j +public class GrayClientInitializer implements ApplicationContextAware, InitializingBean { + private ApplicationContext cxt; + + @Override + public void afterPropertiesSet() throws Exception { + GrayClientHolder.setGrayManager(getBean("grayManager", GrayManager.class)); + GrayClientHolder.setRequestLocalStorage(getBean("requestLocalStorage", RequestLocalStorage.class)); + GrayClientHolder.setServerExplainer(getBean("serverExplainer", ServerExplainer.class)); + + initGrayManagerRequestInterceptors(); + + } + + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.cxt = applicationContext; + } + + + private T getBean(String beanName, Class cls) { + T t = null; + try { + t = cxt.getBean(beanName, cls); + } catch (BeansException e) { + log.warn("没有从spring容器中找到name为'{}', class为'{}'的Bean", beanName, cls); + } + if (t == null) { + t = cxt.getBean(cls); + } + return t; + } + + + /** + * 为了解耦合,特别将GrayManger加载Sping容器中的RequestInterceptor的逻辑独立出来 + */ + private void initGrayManagerRequestInterceptors() { + Map requestInterceptors = cxt.getBeansOfType(RequestInterceptor.class); + GrayManager grayManager = GrayClientHolder.getGrayManager(); + if (grayManager instanceof AbstractGrayManager) { + ((AbstractGrayManager) grayManager).setRequestInterceptors(requestInterceptors.values()); + } + grayManager.setup(); + } +} diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayManager.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayManager.java index 5372325f..0bc1a0c5 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayManager.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayManager.java @@ -42,6 +42,7 @@ public interface GrayManager { List getRequeestInterceptors(String interceptroType); + void setup(); void shutdown(); } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/SimpleGrayManager.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/SimpleGrayManager.java index e7065b89..ddd2b55a 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/SimpleGrayManager.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/SimpleGrayManager.java @@ -7,7 +7,6 @@ import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; @@ -21,8 +20,8 @@ public class SimpleGrayManager extends AbstractGrayManager { protected Lock lock = new ReentrantLock(); - public SimpleGrayManager(GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List requestInterceptors) { - super(grayDecisionFactoryKeeper, requestInterceptors); + public SimpleGrayManager(GrayDecisionFactoryKeeper grayDecisionFactoryKeeper) { + super(grayDecisionFactoryKeeper); } @@ -101,9 +100,16 @@ public void closeGray(String serviceId, String instanceId) { } } + @Override + public void setup() { + + } + @Override public void shutdown() { } + + } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java index 93db2742..de2a9d1f 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java @@ -18,8 +18,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import java.util.List; - @Configuration @EnableConfigurationProperties( {GrayClientProperties.class, @@ -42,11 +40,9 @@ public class GrayClientAutoConfiguration { public GrayManager grayManager( @Autowired(required = false) GrayLoadProperties grayLoadProperties, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, - @Autowired(required = false) List requestInterceptors, @Autowired(required = false) InformationClient informationClient) { return new DefaultGrayManager( - grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper, - requestInterceptors, informationClient); + grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper, informationClient); } @@ -64,4 +60,10 @@ public RequestLocalStorage requestLocalStorage() { return new ThreadLocalRequestStorage(); } + + @Bean + public GrayClientInitializer grayClientInitializer() { + return new GrayClientInitializer(); + } + } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayDecisionFactoryConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayDecisionFactoryConfiguration.java index 56068301..275783ed 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayDecisionFactoryConfiguration.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayDecisionFactoryConfiguration.java @@ -3,11 +3,9 @@ import cn.springcloud.gray.decision.DefaultGrayDecisionFactoryKeeper; import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper; import cn.springcloud.gray.decision.factory.*; -import org.apache.commons.collections.CollectionUtils; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.validation.Validator; @@ -41,13 +39,22 @@ public TraceIpGrayDecisionFactory traceIpGrayDecisionFactory() { } } + + /** + * 不可引入spring mvc中的ConversionService, 否则会导致feign 加载时,找不到ServletContext, 从而出现异常:No ServletContext set + * + * @param validator 校验器 + * @param decisionFactories 灰度决策工厂类列表 + * @return 灰度决策工厂管理器 + */ @Bean @ConditionalOnMissingBean public GrayDecisionFactoryKeeper grayDecisionFactoryKeeper( - List conversionServices, Validator validator, List decisionFactories) { - if (CollectionUtils.isNotEmpty(conversionServices)) { - return new DefaultGrayDecisionFactoryKeeper(conversionServices.get(0), validator, decisionFactories); - } + /*List conversionServices, */ + Validator validator, List decisionFactories) { +// if (CollectionUtils.isNotEmpty(conversionServices)) { +// return new DefaultGrayDecisionFactoryKeeper(conversionServices.get(0), validator, decisionFactories); +// } return new DefaultGrayDecisionFactoryKeeper(DefaultConversionService.getSharedInstance(), validator, decisionFactories); } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayEventAutoConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayEventAutoConfiguration.java index f946ffb4..27b2ff99 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayEventAutoConfiguration.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayEventAutoConfiguration.java @@ -7,6 +7,7 @@ import cn.springcloud.gray.event.stream.StreamInput; import cn.springcloud.gray.event.stream.StreamMessageListener; import cn.springcloud.gray.request.track.CommunicableGrayTrackHolder; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -23,7 +24,8 @@ public class GrayEventAutoConfiguration { @Bean @ConditionalOnMissingBean public GrayEventListener grayEventListener( - CommunicableGrayTrackHolder grayTrackHolder, CommunicableGrayManager grayManager) { + @Autowired(required = false) CommunicableGrayTrackHolder grayTrackHolder, + CommunicableGrayManager grayManager) { return new DefaultGrayEventListener(grayTrackHolder, grayManager); } diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/event/DefaultGrayEventListener.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/event/DefaultGrayEventListener.java index 8d8f44e8..4288a33b 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/event/DefaultGrayEventListener.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/event/DefaultGrayEventListener.java @@ -9,10 +9,7 @@ import cn.springcloud.gray.request.track.CommunicableGrayTrackHolder; import org.apache.commons.lang3.StringUtils; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.function.Consumer; /** @@ -85,6 +82,9 @@ private void handleGrayTrack(GrayEventMsg msg) { && !StringUtils.equals(msg.getInstanceId(), instanceLocalInfo.getInstanceId())) { return; } + if (Objects.isNull(grayTrackHolder)) { + return; + } GrayTrackDefinition definition = (GrayTrackDefinition) msg.getExtra(); if (definition == null) { diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/web/tracker/HttpHeaderGrayInfoTracker.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/web/tracker/HttpHeaderGrayInfoTracker.java index fae0041c..290931c7 100644 --- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/web/tracker/HttpHeaderGrayInfoTracker.java +++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/web/tracker/HttpHeaderGrayInfoTracker.java @@ -6,7 +6,9 @@ import org.springframework.util.StringUtils; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.Enumeration; +import java.util.List; @Slf4j public class HttpHeaderGrayInfoTracker implements HttpGrayInfoTracker { @@ -23,11 +25,13 @@ public void call(TrackArgs args) { for (String header : defValue.split(",")) { Enumeration headerValues = request.getHeaders(header); + List values = new ArrayList<>(); while (headerValues.hasMoreElements()) { String value = headerValues.nextElement(); - trackInfo.addHeader(header, value); - log.debug("记录下header:{} -> {}", header, value); + values.add(value); } + log.debug("记录下header:{} -> {}", header, values); + trackInfo.setHeader(header, values); } } } diff --git a/spring-cloud-gray-core/pom.xml b/spring-cloud-gray-core/pom.xml index b7081de1..a37eab71 100644 --- a/spring-cloud-gray-core/pom.xml +++ b/spring-cloud-gray-core/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-dependencies/pom.xml b/spring-cloud-gray-dependencies/pom.xml index 4127be79..b6045c60 100644 --- a/spring-cloud-gray-dependencies/pom.xml +++ b/spring-cloud-gray-dependencies/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 @@ -17,7 +17,7 @@ cn.springcloud.gray spring-cloud-gray-dependencies - A.1.0.1 + A.1.0.3 pom diff --git a/spring-cloud-gray-samples/pom.xml b/spring-cloud-gray-samples/pom.xml index abed80b9..35277864 100644 --- a/spring-cloud-gray-samples/pom.xml +++ b/spring-cloud-gray-samples/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-eureka-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-eureka-sample/pom.xml index 5ce4fb36..7fa23582 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-eureka-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-eureka-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 @@ -20,7 +20,7 @@ spring-cloud-gray-utils cn.springcloud.gray - A.1.0.1 + A.1.0.3 org.springframework.boot diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/pom.xml index 16ea7e64..5290a6dc 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/EurekaDiscoveryTest.java b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/EurekaDiscoveryTest.java index ad0f0095..059878c4 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/EurekaDiscoveryTest.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/EurekaDiscoveryTest.java @@ -4,7 +4,6 @@ import com.netflix.discovery.EurekaClient; import com.netflix.discovery.shared.Application; import lombok.extern.slf4j.Slf4j; -import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -25,7 +24,7 @@ public class EurekaDiscoveryTest { private EurekaClient eurekaClient; - @Test + // @Test public void test() { Application application = eurekaClient.getApplication("service-a"); application.getInstances() diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceRecordEvictionTest.java b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceRecordEvictionTest.java index 95080a0d..0ae46772 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceRecordEvictionTest.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceRecordEvictionTest.java @@ -7,7 +7,6 @@ import cn.springcloud.gray.server.service.GrayInstanceService; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; -import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -29,7 +28,7 @@ public class GrayInstanceRecordEvictionTest { @Autowired private GrayInstanceService grayInstanceService; - @Test + // @Test public void testEvictGrayInstance() { GrayServerProperties.InstanceRecordEvictProperties evictProperties = grayServerProperties.getInstance().getEviction(); diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceServiceTest.java b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceServiceTest.java index 90ebc021..bdc4f71f 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceServiceTest.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceServiceTest.java @@ -35,7 +35,7 @@ public class GrayInstanceServiceTest { private GrayServerProperties grayServerProperties; - @Test + // @Test public void test() throws JsonProcessingException { List grayInstances = grayInstanceService.findAllByStatus( GrayStatus.OPEN, grayServerProperties.getInstance().getNormalInstanceStatus()); diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayTrackServiceTest.java b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayTrackServiceTest.java index 094f40dd..6155a6e3 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayTrackServiceTest.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayTrackServiceTest.java @@ -4,7 +4,6 @@ import cn.springcloud.gray.server.module.domain.GrayTrack; import cn.springcloud.gray.server.service.GrayTrackService; import lombok.extern.slf4j.Slf4j; -import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -20,7 +19,7 @@ public class GrayTrackServiceTest { @Autowired private GrayTrackService grayTrackService; - @Test + // @Test public void test1() { GrayTrack grayTrack = GrayTrack.builder() .id(1L) diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/pom.xml index a6a45458..44b77f47 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/configuration/GraylConfiguration.java b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/configuration/GraylConfiguration.java index ca770727..9b0757b4 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/configuration/GraylConfiguration.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/configuration/GraylConfiguration.java @@ -18,7 +18,9 @@ public class GraylConfiguration { @Bean public SimpleGrayManager grayManager() { - return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors); + SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper); + simpleGrayManager.setRequestInterceptors(requestInterceptors); + return simpleGrayManager; } diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/pom.xml index bcc3177f..b75f6466 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/java/cn/springcloud/service/a/rest/TestResource.java b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/java/cn/springcloud/service/a/rest/TestResource.java index ed783baf..bef6fe64 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/java/cn/springcloud/service/a/rest/TestResource.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/java/cn/springcloud/service/a/rest/TestResource.java @@ -1,11 +1,15 @@ package cn.springcloud.service.a.rest; +import cn.springcloud.gray.request.GrayHttpTrackInfo; import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.util.Enumeration; import java.util.Map; /** @@ -13,13 +17,24 @@ */ @RestController @RequestMapping("/api/test") +@Slf4j public class TestResource { @Autowired Environment env; @RequestMapping(value = "/get", method = RequestMethod.GET) @ResponseBody - public Map testGet(@RequestParam(value = "version", required = false) String version) { + public Map testGet( + @RequestParam(value = "version", required = false) String version, + HttpServletRequest request) { + Enumeration names = request.getHeaderNames(); + while (names.hasMoreElements()) { + String name = names.nextElement(); + if (StringUtils.startsWith(name, GrayHttpTrackInfo.GRAY_TRACK_HEADER_PREFIX)) { + log.info("{}:{}", name, request.getHeader(name)); + } + } + request.getHeader(""); return ImmutableMap.of("test", "success.", "version", StringUtils.defaultIfEmpty(version, ""), "serverPort", env.getProperty("server.port")); } diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/resources/config/application.yml b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/resources/config/application.yml index b924b76f..dfe6c31d 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/resources/config/application.yml +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a1-sample/src/main/resources/config/application.yml @@ -13,7 +13,7 @@ eureka: instanceId: ${spring.application.name}:${server.port} lease-renewal-interval-in-seconds: 10 lease-expiration-duration-in-seconds: 30 - initial-status: starting + initial-status: up # initial-status: out_of_service gray: client: diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/pom.xml index 120344df..800f4c0f 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/GraylConfiguration.java b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/GraylConfiguration.java index d1b3495a..34d1a978 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/GraylConfiguration.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/GraylConfiguration.java @@ -18,7 +18,9 @@ public class GraylConfiguration { @Bean public SimpleGrayManager grayManager() { - return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors); + SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper); + simpleGrayManager.setRequestInterceptors(requestInterceptors); + return simpleGrayManager; } diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/rest/TestResource.java b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/rest/TestResource.java index 9e114290..ea9fe065 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/rest/TestResource.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/rest/TestResource.java @@ -1,13 +1,16 @@ package cn.springcloud.gray.service.b.rest; +import cn.springcloud.gray.request.GrayHttpTrackInfo; import cn.springcloud.gray.service.b.feign.TestClient; import com.google.common.collect.ImmutableMap; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; +import java.util.Enumeration; import java.util.Map; /** @@ -15,6 +18,7 @@ */ @RestController @RequestMapping("/api/test") +@Slf4j public class TestResource { @Autowired private RestTemplate restTemplate; @@ -57,7 +61,20 @@ public Map restTemplateGet(HttpServletRequest request) { */ @RequestMapping(value = "/feignGet", method = RequestMethod.GET) @ResponseBody - public Map feignGet(@RequestParam(value = "version", required = false) String version) { + public Map feignGet( + @RequestParam(value = "version", required = false) String version, + HttpServletRequest request) { + Enumeration names = request.getHeaderNames(); + while (names.hasMoreElements()) { + String name = names.nextElement(); + if (org.apache.commons.lang.StringUtils.startsWith(name, GrayHttpTrackInfo.GRAY_TRACK_HEADER_PREFIX)) { + log.info("{}:{}", name, request.getHeader(name)); + Enumeration values = request.getHeaders(name); + while (values.hasMoreElements()) { + System.out.println(values.nextElement()); + } + } + } Map map = testClient.testGet(version); return ImmutableMap.of("feignGet", "success.", "service-a-result", map); } diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/resources/config/application.yml b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/resources/config/application.yml index edc5ca71..61976a30 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/resources/config/application.yml +++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/resources/config/application.yml @@ -45,6 +45,8 @@ feign: gray: enabled: true + hystrix: + enabled: true server: url: http://localhost:20202 request: diff --git a/spring-cloud-gray-samples/spring-cloud-gray-stream-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-stream-sample/pom.xml index 302907ba..4d366604 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-stream-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-stream-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/pom.xml b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/pom.xml index 0dc63e4e..eb26739f 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/pom.xml +++ b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray-samples cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/configuration/GraylConfiguration.java b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/configuration/GraylConfiguration.java index 5174bfd2..573f9a0e 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/configuration/GraylConfiguration.java +++ b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/configuration/GraylConfiguration.java @@ -19,7 +19,9 @@ public class GraylConfiguration { @Bean public GrayManager grayManager() { - return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors); + SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper); + simpleGrayManager.setRequestInterceptors(requestInterceptors); + return simpleGrayManager; } diff --git a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/resources/config/application.yml b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/resources/config/application.yml index 0d28bf8d..e7183b5d 100644 --- a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/resources/config/application.yml +++ b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/resources/config/application.yml @@ -50,6 +50,8 @@ zuul: # serviceId: eureka-client #指定路由到的serviceId gray: # enabled: true + hystrix: + enabled: true server: url: http://localhost:20202 client: diff --git a/spring-cloud-gray-server/pom.xml b/spring-cloud-gray-server/pom.xml index 00808586..816c805b 100644 --- a/spring-cloud-gray-server/pom.xml +++ b/spring-cloud-gray-server/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 @@ -56,18 +56,22 @@ io.springfox springfox-swagger2 + io.springfox springfox-swagger-ui + io.springfox springfox-spring-web + io.springfox springfox-bean-validators + @@ -82,6 +86,7 @@ geronimo-jta_1.1_spec + javax.transaction @@ -90,23 +95,28 @@ org.springframework.data spring-data-jpa + mysql mysql-connector-java + org.mapstruct mapstruct-jdk8 + org.springframework.cloud spring-cloud-stream + javax.interceptor javax.interceptor-api + diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/GrayServerInitializingDestroyBean.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/GrayServerInitializingDestroyBean.java index cc8af317..28f97ffd 100644 --- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/GrayServerInitializingDestroyBean.java +++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/GrayServerInitializingDestroyBean.java @@ -73,7 +73,12 @@ private void initGrayInstanceRecordEvictionTask() { } private T getBean(String beanName, Class cls) { - T t = appCxt.getBean(beanName, cls); + T t = null; + try { + t = appCxt.getBean(beanName, cls); + } catch (BeansException e) { + log.warn("没有从spring容器中找到name为'{}', class为'{}'的Bean", beanName, cls); + } if (t == null) { t = appCxt.getBean(cls); } diff --git a/spring-cloud-gray-starter-dependencies/pom.xml b/spring-cloud-gray-starter-dependencies/pom.xml index 37088201..a4987124 100644 --- a/spring-cloud-gray-starter-dependencies/pom.xml +++ b/spring-cloud-gray-starter-dependencies/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-utils/pom.xml b/spring-cloud-gray-utils/pom.xml index 0e81065b..a5b7e14f 100644 --- a/spring-cloud-gray-utils/pom.xml +++ b/spring-cloud-gray-utils/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-gray-webui/pom.xml b/spring-cloud-gray-webui/pom.xml index a0fa3783..53ae4068 100644 --- a/spring-cloud-gray-webui/pom.xml +++ b/spring-cloud-gray-webui/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-starter-gray-client/pom.xml b/spring-cloud-starter-gray-client/pom.xml index 2aabd7e5..fef274bb 100644 --- a/spring-cloud-starter-gray-client/pom.xml +++ b/spring-cloud-starter-gray-client/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-starter-gray-client/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-gray-client/src/main/resources/META-INF/spring.factories index 0b2ea614..1dde7363 100644 --- a/spring-cloud-starter-gray-client/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-gray-client/src/main/resources/META-INF/spring.factories @@ -4,10 +4,11 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ cn.springcloud.gray.client.config.GrayClientAutoConfiguration,\ cn.springcloud.gray.client.config.GrayClientWebConfiguration,\ - cn.springcloud.gray.client.netflix.configuration.NetflixGrayAutoConfiguration,\ cn.springcloud.gray.client.netflix.configuration.GrayClientEurekaAutoConfiguration,\ - cn.springcloud.gray.client.netflix.feign.configuration.GrayFeignAutoConfiguration,\ - cn.springcloud.gray.client.netflix.zuul.configuration.GrayZuulAutoConfiguration,\ + cn.springcloud.gray.client.netflix.configuration.HystrixGrayAutoConfiguration,\ + cn.springcloud.gray.client.netflix.configuration.NetflixRibbonGrayAutoConfiguration,\ cn.springcloud.gray.client.netflix.resttemplate.configuration.GrayRestTemplateAutoConfiguration,\ - cn.springcloud.gray.client.config.GrayEventAutoConfiguration,\ -cn.springcloud.gray.client.config.GrayClientBeanPostProcessorConfiguration \ No newline at end of file + cn.springcloud.gray.client.netflix.zuul.configuration.GrayZuulAutoConfiguration,\ +cn.springcloud.gray.client.netflix.feign.configuration.GrayFeignAutoConfiguration,\ +cn.springcloud.gray.client.config.GrayEventAutoConfiguration,\ +cn.springcloud.gray.client.config.GrayClientBeanPostProcessorConfiguration diff --git a/spring-cloud-starter-gray-eureka-server/pom.xml b/spring-cloud-starter-gray-eureka-server/pom.xml index 89e0294e..e7d05aaf 100644 --- a/spring-cloud-starter-gray-eureka-server/pom.xml +++ b/spring-cloud-starter-gray-eureka-server/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0 diff --git a/spring-cloud-starter-gray-server/pom.xml b/spring-cloud-starter-gray-server/pom.xml index cb555238..b243ac70 100644 --- a/spring-cloud-starter-gray-server/pom.xml +++ b/spring-cloud-starter-gray-server/pom.xml @@ -5,7 +5,7 @@ spring-cloud-gray cn.springcloud.gray - A.1.0.1 + A.1.0.3 4.0.0