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