diff --git a/pom.xml b/pom.xml
index b99a1c30..65e65cb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
cn.springcloud.gray
spring-cloud-gray
pom
- 2.1.0
+ A.1.0.1
https://github.com/SpringCloud/spring-cloud-gray
Spring Cloud中国社区
diff --git a/spring-cloud-gray-client-netflix/pom.xml b/spring-cloud-gray-client-netflix/pom.xml
index 76b842d0..3610ffd5 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
- 2.1.0
+ A.1.0.1
4.0.0
@@ -50,6 +50,11 @@
org.springframework.cloud
spring-cloud-netflix-eureka-client
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
com.netflix.eureka
eureka-client
diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/GrayClientEurekaAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/GrayClientEurekaAutoConfiguration.java
index d112b4f5..f1079091 100644
--- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/GrayClientEurekaAutoConfiguration.java
+++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/configuration/GrayClientEurekaAutoConfiguration.java
@@ -1,5 +1,6 @@
package cn.springcloud.gray.client.netflix.configuration;
+import cn.springcloud.gray.GrayManager;
import cn.springcloud.gray.InstanceLocalInfo;
import cn.springcloud.gray.client.netflix.eureka.EurekaInstanceDiscoveryClient;
import cn.springcloud.gray.client.netflix.eureka.EurekaServerExplainer;
@@ -15,7 +16,7 @@
import org.springframework.context.annotation.Configuration;
@Configuration
-@ConditionalOnBean(EurekaClient.class)
+@ConditionalOnBean({GrayManager.class, EurekaClient.class})
public class GrayClientEurekaAutoConfiguration {
@Autowired
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 a274db50..99d4023d 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
@@ -1,6 +1,8 @@
package cn.springcloud.gray.client.netflix.configuration;
import cn.springcloud.gray.GrayManager;
+import cn.springcloud.gray.client.netflix.connectionpoint.DefaultHystrixRibbonConnectionPoint;
+import cn.springcloud.gray.client.netflix.connectionpoint.RibbonConnectionPoint;
import cn.springcloud.gray.client.netflix.hystrix.HystrixRequestLocalStorage;
import cn.springcloud.gray.request.RequestLocalStorage;
import cn.springcloud.gray.request.track.GrayTrackHolder;
@@ -8,7 +10,7 @@
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
import feign.hystrix.HystrixFeign;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -20,20 +22,30 @@
import java.io.IOException;
@Configuration
+@ConditionalOnBean(GrayManager.class)
@ConditionalOnClass({HystrixCommand.class, HystrixFeign.class})
+//@Import(HystrixGrayTrackWebConfiguration.class)
public class HystrixGrayAutoConfiguration {
- @Autowired
- private GrayManager grayManager;
-
-
@Bean
public RequestLocalStorage requestLocalStorage() {
return new HystrixRequestLocalStorage();
}
+ /**
+ * 支持hystrix使用线程隔离时依然能够进行跑线程传递GrayRequest
+ *
+ * @return DefaultHystrixRibbonConnectionPoint
+ */
+ @Bean
+ public RibbonConnectionPoint hystrixRibbonConnectionPoint(
+ GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
+ return new DefaultHystrixRibbonConnectionPoint(grayManager, requestLocalStorage);
+ }
+
+
@Bean
public GrayTrackFilter grayTrackFilter(
GrayTrackHolder grayTrackHolder,
@@ -54,5 +66,4 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
}
};
}
-
}
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/NetflixGrayAutoConfiguration.java
index e0e29d80..c0e9c566 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/NetflixGrayAutoConfiguration.java
@@ -6,12 +6,14 @@
import cn.springcloud.gray.client.netflix.ribbon.configuration.GrayRibbonClientsConfiguration;
import cn.springcloud.gray.request.RequestLocalStorage;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
+@ConditionalOnBean(GrayManager.class)
@RibbonClients(defaultConfiguration = GrayRibbonClientsConfiguration.class)
public class NetflixGrayAutoConfiguration {
diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultHystrixRibbonConnectionPoint.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultHystrixRibbonConnectionPoint.java
new file mode 100644
index 00000000..e2e82420
--- /dev/null
+++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultHystrixRibbonConnectionPoint.java
@@ -0,0 +1,38 @@
+package cn.springcloud.gray.client.netflix.connectionpoint;
+
+import cn.springcloud.gray.GrayManager;
+import cn.springcloud.gray.request.RequestLocalStorage;
+import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
+
+public class DefaultHystrixRibbonConnectionPoint extends DefaultRibbonConnectionPoint {
+
+ private ThreadLocal hystrixRequestContextInitialized = new ThreadLocal<>();
+
+ public DefaultHystrixRibbonConnectionPoint(GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
+ super(grayManager, requestLocalStorage);
+ }
+
+
+ @Override
+ public void executeConnectPoint(ConnectPointContext connectPointContext) {
+ if (!HystrixRequestContext.isCurrentThreadInitialized()) {
+ HystrixRequestContext.initializeContext();
+ hystrixRequestContextInitialized.set(true);
+ }
+ super.executeConnectPoint(connectPointContext);
+ }
+
+ @Override
+ public void shutdownconnectPoint(ConnectPointContext connectPointContext) {
+ try {
+ super.shutdownconnectPoint(connectPointContext);
+ } finally {
+ Boolean hystrixReqCxtInited = hystrixRequestContextInitialized.get();
+ if (hystrixReqCxtInited != null && hystrixReqCxtInited && HystrixRequestContext.isCurrentThreadInitialized()) {
+ HystrixRequestContext.getContextForCurrentThread().shutdown();
+ }
+ }
+ }
+
+
+}
diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultRibbonConnectionPoint.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultRibbonConnectionPoint.java
index ece98572..994df1c6 100644
--- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultRibbonConnectionPoint.java
+++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/connectionpoint/DefaultRibbonConnectionPoint.java
@@ -4,7 +4,6 @@
import cn.springcloud.gray.RequestInterceptor;
import cn.springcloud.gray.request.GrayRequest;
import cn.springcloud.gray.request.RequestLocalStorage;
-import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
import java.util.List;
@@ -12,7 +11,6 @@ public class DefaultRibbonConnectionPoint implements RibbonConnectionPoint {
private GrayManager grayManager;
private RequestLocalStorage requestLocalStorage;
- private ThreadLocal hystrixRequestContextInitialized = new ThreadLocal<>();
public DefaultRibbonConnectionPoint(GrayManager grayManager, RequestLocalStorage requestLocalStorage) {
this.grayManager = grayManager;
@@ -22,11 +20,6 @@ public DefaultRibbonConnectionPoint(GrayManager grayManager, RequestLocalStorage
@Override
public void executeConnectPoint(ConnectPointContext connectPointContext) {
- if (!HystrixRequestContext.isCurrentThreadInitialized()) {
- HystrixRequestContext.initializeContext();
- hystrixRequestContextInitialized.set(true);
- }
-
ConnectPointContext.setContextLocal(connectPointContext);
GrayRequest grayRequest = connectPointContext.getGrayRequest();
grayRequest.setGrayTrackInfo(requestLocalStorage.getGrayTrackInfo());
@@ -45,28 +38,21 @@ public void executeConnectPoint(ConnectPointContext connectPointContext) {
@Override
public void shutdownconnectPoint(ConnectPointContext connectPointContext) {
- try {
- if (requestLocalStorage.getGrayRequest() == null) {
- return;
- }
+// if (requestLocalStorage.getGrayRequest() == null) {
+// return;
+// }
- List interceptors = grayManager.getRequeestInterceptors(connectPointContext.getInterceptroType());
- interceptors.forEach(interceptor -> {
- if (interceptor.shouldIntercept()) {
- if (!interceptor.after(connectPointContext.getGrayRequest())) {
- return;
- }
+ List interceptors = grayManager.getRequeestInterceptors(connectPointContext.getInterceptroType());
+ interceptors.forEach(interceptor -> {
+ if (interceptor.shouldIntercept()) {
+ if (!interceptor.after(connectPointContext.getGrayRequest())) {
+ return;
}
- });
- ConnectPointContext.removeContextLocal();
- requestLocalStorage.removeGrayTrackInfo();
- requestLocalStorage.removeGrayRequest();
- } finally {
- Boolean hystrixReqCxtInited = hystrixRequestContextInitialized.get();
- if (hystrixReqCxtInited != null && hystrixReqCxtInited && HystrixRequestContext.isCurrentThreadInitialized()) {
- HystrixRequestContext.getContextForCurrentThread().shutdown();
}
- }
+ });
+ ConnectPointContext.removeContextLocal();
+ requestLocalStorage.removeGrayTrackInfo();
+ requestLocalStorage.removeGrayRequest();
}
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 19d84092..31ad5bf3 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,10 +1,12 @@
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;
import feign.Feign;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@@ -14,8 +16,9 @@
/**
* Created by saleson on 2017/11/9.
*/
-@ConditionalOnClass(value = {ILoadBalancer.class, Feign.class})
@Configuration
+@ConditionalOnBean(GrayManager.class)
+@ConditionalOnClass(value = {ILoadBalancer.class, Feign.class})
@EnableFeignClients(defaultConfiguration = {GrayFeignClientsConfiguration.class})
public class GrayFeignAutoConfiguration {
diff --git a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/resttemplate/configuration/GrayRestTemplateAutoConfiguration.java b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/resttemplate/configuration/GrayRestTemplateAutoConfiguration.java
index 2138843f..c2deaaac 100644
--- a/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/resttemplate/configuration/GrayRestTemplateAutoConfiguration.java
+++ b/spring-cloud-gray-client-netflix/src/main/java/cn/springcloud/gray/client/netflix/resttemplate/configuration/GrayRestTemplateAutoConfiguration.java
@@ -1,12 +1,13 @@
package cn.springcloud.gray.client.netflix.resttemplate.configuration;
+import cn.springcloud.gray.GrayManager;
import cn.springcloud.gray.client.config.properties.GrayRequestProperties;
import cn.springcloud.gray.client.netflix.connectionpoint.RibbonConnectionPoint;
import cn.springcloud.gray.client.netflix.resttemplate.GrayClientHttpRequestIntercptor;
import cn.springcloud.gray.client.netflix.resttemplate.RestTemplateRequestInterceptor;
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;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
@@ -16,7 +17,8 @@
import java.util.List;
@Configuration
-@ConditionalOnClass(value = RestTemplate.class)
+@ConditionalOnBean({GrayManager.class, RestTemplate.class})
+@ConditionalOnClass(value = {RestTemplate.class, LoadBalanced.class})
public class GrayRestTemplateAutoConfiguration {
@Autowired
@@ -26,20 +28,13 @@ public class GrayRestTemplateAutoConfiguration {
@Bean
- @LoadBalanced
- @ConditionalOnMissingBean
- public RestTemplate restTemplate() {
- RestTemplate restTemplate = new RestTemplate();
-// restTemplate.getInterceptors().add(grayClientHttpRequestIntercptor);
- return restTemplate;
- }
-
-
- @Bean
- public GrayClientHttpRequestIntercptor grayClientHttpRequestIntercptor(@LoadBalanced List restTemplates) {
+ public GrayClientHttpRequestIntercptor grayClientHttpRequestIntercptor(
+ @Autowired(required = false) @LoadBalanced List restTemplates) {
GrayClientHttpRequestIntercptor intercptor = new GrayClientHttpRequestIntercptor(
grayRequestProperties, ribbonConnectionPoint);
- restTemplates.forEach(restTemplate -> restTemplate.getInterceptors().add(intercptor));
+ if (restTemplates != null) {
+ restTemplates.forEach(restTemplate -> restTemplate.getInterceptors().add(intercptor));
+ }
return intercptor;
}
@@ -48,7 +43,6 @@ public GrayClientHttpRequestIntercptor grayClientHttpRequestIntercptor(@LoadBala
@ConditionalOnProperty(value = "gray.request.track.enabled", matchIfMissing = true)
public static class GrayTrackRestTemplateConfiguration {
-
@Bean
public RestTemplateRequestInterceptor restTemplateRequestInterceptor() {
return new RestTemplateRequestInterceptor();
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 aa3b84b0..8dab424e 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
@@ -3,9 +3,9 @@
import cn.springcloud.gray.GrayManager;
import cn.springcloud.gray.client.netflix.GrayClientHolder;
import cn.springcloud.gray.model.GrayService;
-import cn.springcloud.gray.servernode.ServerExplainer;
import cn.springcloud.gray.request.GrayRequest;
import cn.springcloud.gray.request.RequestLocalStorage;
+import cn.springcloud.gray.servernode.ServerExplainer;
import com.google.common.base.Optional;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.*;
@@ -61,7 +61,7 @@ public Server choose(Object key) {
GrayService grayService = grayManager.getGrayService(serviceId);
List servers = lb.getAllServers();
List grayServers = new ArrayList<>(grayService.getGrayInstances().size());
- List normalServers = new ArrayList<>(servers.size() - grayService.getGrayInstances().size());
+ List normalServers = new ArrayList<>(Math.min(servers.size(), grayService.getGrayInstances().size()));
for (Server server : servers) {
// ServerSpec serverSpec = serverExplainer.apply(server);
@@ -93,7 +93,7 @@ public void setLoadBalancer(ILoadBalancer lb) {
super.setLoadBalancer(lb);
}
- private Server choose(AbstractServerPredicate serverPredicate, List servers, Object key) {
+ protected Server choose(AbstractServerPredicate serverPredicate, List servers, Object key) {
Optional server = serverPredicate.chooseRoundRobinAfterFiltering(servers, key);
if (server.isPresent()) {
return server.get();
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 66ccb1a7..f420b07b 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
@@ -1,5 +1,6 @@
package cn.springcloud.gray.client.netflix.zuul.configuration;
+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;
@@ -8,12 +9,14 @@
import cn.springcloud.gray.client.netflix.zuul.ZuulRequestInterceptor;
import com.netflix.zuul.http.ZuulServlet;
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.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
+@ConditionalOnBean(GrayManager.class)
@ConditionalOnClass(value = ZuulServlet.class)
public class GrayZuulAutoConfiguration {
diff --git a/spring-cloud-gray-client/pom.xml b/spring-cloud-gray-client/pom.xml
index 0e32020c..b0945dec 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
- 2.1.0
+ A.1.0.1
4.0.0
@@ -63,6 +63,11 @@
org.springframework.cloud
spring-cloud-stream
+
+ org.springframework.cloud
+ spring-cloud-commons
+ compile
+
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 e96d59fb..b915c3db 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
@@ -16,7 +16,6 @@ public AbstractCommunicableGrayManager(
super(grayDecisionFactoryKeeper, requestInterceptors);
this.grayClientConfig = grayClientConfig;
this.informationClient = informationClient;
- createInformationClient();
}
public GrayClientConfig getGrayClientConfig() {
@@ -28,10 +27,5 @@ public InformationClient getGrayInformationClient() {
return informationClient;
}
- protected void createInformationClient() {
-
-
- }
-
}
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 d1d74fa7..9e6c14a4 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
@@ -5,6 +5,7 @@
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
import cn.springcloud.gray.model.GrayInstance;
import cn.springcloud.gray.model.GrayService;
+import cn.springcloud.gray.model.GrayStatus;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
@@ -83,6 +84,9 @@ private void joinLoadedGrays(Map grayServices) {
if (grayServices.containsKey(instance.getServiceId())
|| grayServices.get(instance.getServiceId())
.getGrayInstance(instance.getInstanceId()) != null) {
+ if (instance.getGrayStatus() == null) {
+ instance.setGrayStatus(GrayStatus.OPEN);
+ }
updateGrayInstance(grayServices, instance);
}
});
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientConfig.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientConfig.java
index 323a8caf..7cd9a08e 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientConfig.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientConfig.java
@@ -25,14 +25,6 @@ public interface GrayClientConfig {
int grayEnrollDealyTimeInMs();
- /**
- * 灰度服务器的url
- *
- * @return 返回gray-server的url
- */
- String getServerUrl();
-
-
/**
* 更新灰度列表的时间间隔(ms),小于等于0将不会开启定时轮询
*
@@ -41,18 +33,4 @@ public interface GrayClientConfig {
int getServiceUpdateIntervalTimerInMs();
- /**
- * 在和灰度服务器通信时,如果交互失败,是否重试。
- *
- * @return 返回是否重试
- */
- boolean isRetryable();
-
- /**
- * 重试次数
- *
- * @return 返回重试次数
- */
- int getRetryNumberOfRetries();
-
}
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 e16ff48b..e7065b89 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
@@ -6,6 +6,7 @@
import lombok.extern.slf4j.Slf4j;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -33,7 +34,7 @@ public boolean hasGray(String serviceId) {
@Override
public Collection allGrayServices() {
- return grayServices.values();
+ return Collections.unmodifiableCollection(grayServices.values());
}
@Override
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/EnableGrayClient.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/EnableGrayClient.java
index 86bf5a4c..8a6d56d4 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/EnableGrayClient.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/EnableGrayClient.java
@@ -1,14 +1,15 @@
package cn.springcloud.gray.client;
-import cn.springcloud.gray.client.config.GrayClientMarkerConfiguration;
+import cn.springcloud.gray.client.config.GrayClientImportSelector;
import org.springframework.context.annotation.Import;
import java.lang.annotation.*;
-@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
@Documented
-@Import(GrayClientMarkerConfiguration.class)
+@Inherited
+@Import(GrayClientImportSelector.class)
public @interface EnableGrayClient {
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientInitializingDestroyBean.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientEnrollInitializingDestroyBean.java
similarity index 94%
rename from spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientInitializingDestroyBean.java
rename to spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientEnrollInitializingDestroyBean.java
index 1f18174f..015d431d 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientInitializingDestroyBean.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/GrayClientEnrollInitializingDestroyBean.java
@@ -10,13 +10,13 @@
@Slf4j
-public class GrayClientInitializingDestroyBean implements InitializingBean {
+public class GrayClientEnrollInitializingDestroyBean implements InitializingBean {
private CommunicableGrayManager grayManager;
private InstanceLocalInfo instanceLocalInfo;
private GrayClientConfig clientConfig;
- public GrayClientInitializingDestroyBean(
+ public GrayClientEnrollInitializingDestroyBean(
CommunicableGrayManager grayManager, GrayClientConfig clientConfig, InstanceLocalInfo instanceLocalInfo) {
this.grayManager = grayManager;
this.clientConfig = clientConfig;
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 699193f2..266de43c 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
@@ -1,18 +1,16 @@
package cn.springcloud.gray.client.config;
import cn.springcloud.gray.*;
-import cn.springcloud.gray.client.GrayClientInitializingDestroyBean;
+import cn.springcloud.gray.client.GrayClientEnrollInitializingDestroyBean;
import cn.springcloud.gray.client.config.properties.GrayClientProperties;
import cn.springcloud.gray.client.config.properties.GrayLoadProperties;
import cn.springcloud.gray.client.config.properties.GrayRequestProperties;
-import cn.springcloud.gray.communication.HttpInformationClient;
+import cn.springcloud.gray.client.config.properties.GrayServerProperties;
import cn.springcloud.gray.communication.InformationClient;
-import cn.springcloud.gray.communication.RetryableInformationClient;
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
import cn.springcloud.gray.request.RequestLocalStorage;
import cn.springcloud.gray.request.ThreadLocalRequestStorage;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -23,9 +21,15 @@
import java.util.List;
@Configuration
-@EnableConfigurationProperties({GrayClientProperties.class, GrayRequestProperties.class})
-@ConditionalOnBean(GrayClientMarkerConfiguration.GrayClientMarker.class)
-@Import({GrayDecisionFactoryConfiguration.class, GrayTrackConfiguration.class})
+@EnableConfigurationProperties(
+ {GrayClientProperties.class,
+ GrayServerProperties.class,
+ GrayRequestProperties.class,
+ GrayLoadProperties.class})
+@ConditionalOnProperty(value = "gray.enabled")
+@Import({InformationClientConfiguration.class,
+ GrayDecisionFactoryConfiguration.class,
+ GrayTrackConfiguration.class})
public class GrayClientAutoConfiguration {
@@ -33,19 +37,6 @@ public class GrayClientAutoConfiguration {
private GrayClientProperties grayClientProperties;
- @Bean
- @ConditionalOnMissingBean
- @ConditionalOnProperty(value = "gray.client.serverUrl")
- public InformationClient informationClient() {
- InformationClient httpClient = new HttpInformationClient(grayClientProperties.getServerUrl());
- if (grayClientProperties.isRetryable()) {
- return new RetryableInformationClient(Math.max(3, grayClientProperties.getRetryNumberOfRetries()), httpClient);
- } else {
- return httpClient;
- }
- }
-
-
@Bean
@ConditionalOnMissingBean
public GrayManager grayManager(
@@ -60,10 +51,10 @@ public GrayManager grayManager(
@Bean
- @ConditionalOnBean({CommunicableGrayManager.class, InstanceLocalInfo.class})
- public GrayClientInitializingDestroyBean grayClientInitializingDestroyBean(
+ @ConditionalOnProperty(value = "gray.client.instance.grayEnroll")
+ public GrayClientEnrollInitializingDestroyBean grayClientEnrollInitializingDestroyBean(
CommunicableGrayManager grayManager, InstanceLocalInfo instanceLocalInfo) {
- return new GrayClientInitializingDestroyBean(grayManager, grayClientProperties, instanceLocalInfo);
+ return new GrayClientEnrollInitializingDestroyBean(grayManager, grayClientProperties, instanceLocalInfo);
}
@@ -73,5 +64,4 @@ public RequestLocalStorage requestLocalStorage() {
return new ThreadLocalRequestStorage();
}
-
}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientBeanPostProcessorConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientBeanPostProcessorConfiguration.java
index 867bdebc..a4f8cd5d 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientBeanPostProcessorConfiguration.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientBeanPostProcessorConfiguration.java
@@ -1,13 +1,16 @@
package cn.springcloud.gray.client.config;
+import cn.springcloud.gray.GrayManager;
import cn.springcloud.gray.InstanceLocalInfo;
import cn.springcloud.gray.InstanceLocalInfoAware;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
+@ConditionalOnBean(GrayManager.class)
public class GrayClientBeanPostProcessorConfiguration {
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientImportSelector.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientImportSelector.java
new file mode 100644
index 00000000..d53c1894
--- /dev/null
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientImportSelector.java
@@ -0,0 +1,50 @@
+package cn.springcloud.gray.client.config;
+
+
+import cn.springcloud.gray.client.EnableGrayClient;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.cloud.commons.util.SpringFactoryImportSelector;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.PropertiesPropertySource;
+import org.springframework.core.type.AnnotationMetadata;
+
+import java.util.Properties;
+
+@Order(Ordered.LOWEST_PRECEDENCE - 100)
+public class GrayClientImportSelector extends SpringFactoryImportSelector {
+
+
+ @Override
+ public String[] selectImports(AnnotationMetadata metadata) {
+ String[] imports = super.selectImports(metadata);
+
+ Environment env = getEnvironment();
+ String grayEnabled = env.getProperty("gray.enabled");
+ if (StringUtils.isEmpty(grayEnabled)) {
+ if (ConfigurableEnvironment.class.isInstance(env)) {
+ ConfigurableEnvironment environment = (ConfigurableEnvironment) env;
+ MutablePropertySources m = environment.getPropertySources();
+ Properties p = new Properties();
+ p.put("gray.enabled", "true");
+ m.addLast(new PropertiesPropertySource("defaultProperties", p));
+ }
+ }
+
+ return imports;
+ }
+
+
+ @Override
+ protected boolean isEnabled() {
+ return false;
+ }
+
+ @Override
+ protected boolean hasDefaultFactory() {
+ return true;
+ }
+}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientMarkerConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientMarkerConfiguration.java
deleted file mode 100644
index 917a7379..00000000
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientMarkerConfiguration.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.springcloud.gray.client.config;
-
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class GrayClientMarkerConfiguration {
-
- @Bean
- public GrayClientMarker grayClientMarker() {
- return new GrayClientMarker();
- }
-
- public class GrayClientMarker {
- }
-}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientWebConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientWebConfiguration.java
index e1192ec2..15caab88 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientWebConfiguration.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientWebConfiguration.java
@@ -1,10 +1,19 @@
package cn.springcloud.gray.client.config;
+import cn.springcloud.gray.GrayManager;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
-@ComponentScan(basePackages = {"cn.springcloud.gray.web.resources"})
+@ConditionalOnBean(GrayManager.class)
public class GrayClientWebConfiguration {
+
+
+ @Configuration
+ @ComponentScan(basePackages = {"cn.springcloud.gray.web.resources"})
+ public static class GrayClientResourcesConfiguration {
+
+ }
}
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 eb141c64..f946ffb4 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
@@ -1,11 +1,13 @@
package cn.springcloud.gray.client.config;
import cn.springcloud.gray.CommunicableGrayManager;
+import cn.springcloud.gray.GrayManager;
import cn.springcloud.gray.event.DefaultGrayEventListener;
import cn.springcloud.gray.event.GrayEventListener;
import cn.springcloud.gray.event.stream.StreamInput;
import cn.springcloud.gray.event.stream.StreamMessageListener;
import cn.springcloud.gray.request.track.CommunicableGrayTrackHolder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -14,6 +16,7 @@
import org.springframework.context.annotation.Configuration;
@Configuration
+@ConditionalOnBean(GrayManager.class)
public class GrayEventAutoConfiguration {
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayLoadAutoConfigration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayLoadAutoConfigration.java
deleted file mode 100644
index 3da51f44..00000000
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayLoadAutoConfigration.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cn.springcloud.gray.client.config;
-
-import cn.springcloud.gray.GrayManager;
-import cn.springcloud.gray.client.config.properties.GrayLoadProperties;
-import cn.springcloud.gray.model.GrayStatus;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@ConditionalOnProperty(value = "gray.load.enabled", havingValue = "true")
-@EnableConfigurationProperties({GrayLoadProperties.class})
-public class GrayLoadAutoConfigration {
-
- @Autowired
- private GrayLoadProperties grayLoadProperties;
- @Autowired
- private GrayManager grayManager;
-
-
- @Bean
- public InitializingBean loadGrayInfoInitializing() {
- return () -> {
- grayLoadProperties.getGrayInstances().forEach(instance -> {
- if (instance.getGrayStatus() == null) {
- instance.setGrayStatus(GrayStatus.OPEN);
- }
- grayManager.updateGrayInstance(instance);
- });
- };
- }
-
-}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayTrackConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayTrackConfiguration.java
index bd16c3d6..24c0d69b 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayTrackConfiguration.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayTrackConfiguration.java
@@ -3,7 +3,6 @@
import cn.springcloud.gray.client.config.properties.GrayTrackProperties;
import cn.springcloud.gray.communication.InformationClient;
-import cn.springcloud.gray.request.GrayHttpTrackInfo;
import cn.springcloud.gray.request.GrayInfoTracker;
import cn.springcloud.gray.request.GrayTrackInfo;
import cn.springcloud.gray.request.RequestLocalStorage;
@@ -19,9 +18,7 @@
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Configuration
@@ -42,26 +39,21 @@ public GrayTrackHolder grayTrackHolder(
@ConditionalOnProperty(value = "gray.client.runenv", havingValue = "web", matchIfMissing = true)
@Configuration
- public static class GrayClientWebConfiguration extends WebMvcConfigurerAdapter {
+ public static class GrayClientWebConfiguration {
@Autowired
private GrayTrackProperties grayTrackProperties;
- @Autowired
- private List> trackors;
-
- @Autowired
- private RequestLocalStorage requestLocalStorage;
-
@Bean
@ConditionalOnMissingBean
- public GrayTrackFilter grayTrackFilter(GrayTrackHolder grayTrackHolder) {
+ public GrayTrackFilter grayTrackFilter(
+ GrayTrackHolder grayTrackHolder, RequestLocalStorage requestLocalStorage) {
return new GrayTrackFilter(grayTrackHolder, requestLocalStorage);
}
@Bean
- public FilterRegistrationBean companyUrlFilterRegister(GrayTrackFilter filter) {
+ public FilterRegistrationBean grayTrackFilter(GrayTrackFilter filter) {
GrayTrackProperties.Web webProperties = grayTrackProperties.getWeb();
FilterRegistrationBean registration = new FilterRegistrationBean();
//注入过滤器
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/InformationClientConfiguration.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/InformationClientConfiguration.java
new file mode 100644
index 00000000..616daa57
--- /dev/null
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/InformationClientConfiguration.java
@@ -0,0 +1,54 @@
+package cn.springcloud.gray.client.config;
+
+import cn.springcloud.gray.client.config.properties.GrayServerProperties;
+import cn.springcloud.gray.communication.HttpInformationClient;
+import cn.springcloud.gray.communication.InformationClient;
+import cn.springcloud.gray.communication.RetryableInformationClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+@ConditionalOnProperty(value = "gray.server.url")
+public class InformationClientConfiguration {
+
+
+ @Configuration
+ @ConditionalOnProperty(value = "gray.server.loadbalanced", havingValue = "false", matchIfMissing = true)
+ public static class DefaultGrayInformationRestTemplate {
+ @Bean("grayInformationRestTemplate")
+ @ConditionalOnMissingBean(name = {"grayInformationRestTemplate"})
+ public RestTemplate grayInformationRestTemplate() {
+ return new RestTemplate();
+ }
+ }
+
+ @Configuration
+ @ConditionalOnProperty(value = "gray.server.loadbalanced")
+ public static class LoadBalancedGrayInformationRestTemplate {
+ @Bean("grayInformationRestTemplate")
+ @LoadBalanced
+ @ConditionalOnMissingBean(name = {"grayInformationRestTemplate"})
+ public RestTemplate grayInformationRestTemplate() {
+ return new RestTemplate();
+ }
+ }
+
+
+ @Bean
+ @ConditionalOnMissingBean
+ public InformationClient informationClient(
+ @Autowired(required = false) RestTemplate grayInformationRestTemplate,
+ GrayServerProperties grayServerProperties) {
+ InformationClient httpClient = new HttpInformationClient(grayServerProperties.getUrl(), grayInformationRestTemplate);
+ if (grayServerProperties.isRetryable()) {
+ return new RetryableInformationClient(Math.max(3, grayServerProperties.getRetryNumberOfRetries()), httpClient);
+ } else {
+ return httpClient;
+ }
+ }
+}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayClientProperties.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayClientProperties.java
index 139835e7..538badb2 100644
--- a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayClientProperties.java
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayClientProperties.java
@@ -1,7 +1,6 @@
package cn.springcloud.gray.client.config.properties;
import cn.springcloud.gray.GrayClientConfig;
-import cn.springcloud.gray.communication.RetryableInformationClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties("gray.client")
@@ -11,24 +10,9 @@ public class GrayClientProperties implements GrayClientConfig {
private int serviceUpdateIntervalTimerInMs = 60000;
- private String informationClient = "http";
-
- private String serverUrl = "";
-
- private boolean retryable = true;
- private int retryNumberOfRetries = RetryableInformationClient.DEFAULT_NUMBER_OF_RETRIES;
-
private InstanceConfig instance = new InstanceConfig();
- public String getInformationClient() {
- return informationClient;
- }
-
- public void setInformationClient(String informationClient) {
- this.informationClient = informationClient;
- }
-
@Override
public String runenv() {
return runenv;
@@ -44,19 +28,12 @@ public int grayEnrollDealyTimeInMs() {
return instance.getGrayEnrollDealyTimeInMs();
}
- public String getServerUrl() {
- return serverUrl;
- }
@Override
public int getServiceUpdateIntervalTimerInMs() {
return serviceUpdateIntervalTimerInMs;
}
- public void setServerUrl(String serverUrl) {
- this.serverUrl = serverUrl;
- }
-
public void setServiceUpdateIntervalTimerInMs(int serviceUpdateIntervalTimerInMs) {
this.serviceUpdateIntervalTimerInMs = serviceUpdateIntervalTimerInMs;
@@ -71,22 +48,6 @@ public void setInstance(InstanceConfig instance) {
}
- public boolean isRetryable() {
- return retryable;
- }
-
- public void setRetryable(boolean retryable) {
- this.retryable = retryable;
- }
-
- public int getRetryNumberOfRetries() {
- return retryNumberOfRetries;
- }
-
- public void setRetryNumberOfRetries(int retryNumberOfRetries) {
- this.retryNumberOfRetries = retryNumberOfRetries;
- }
-
/**
* 实例
*/
@@ -95,7 +56,6 @@ public class InstanceConfig {
private boolean grayEnroll = false;
private int grayEnrollDealyTimeInMs = 40000;
private boolean useMultiVersion = false;
- private String instanceId;
public boolean isGrayEnroll() {
return grayEnroll;
@@ -126,12 +86,6 @@ public void setUseMultiVersion(boolean useMultiVersion) {
this.useMultiVersion = useMultiVersion;
}
- public String getInstanceId() {
- return instanceId;
- }
- public void setInstanceId(String instanceId) {
- this.instanceId = instanceId;
- }
}
}
diff --git a/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayServerProperties.java b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayServerProperties.java
new file mode 100644
index 00000000..73af0aa8
--- /dev/null
+++ b/spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/properties/GrayServerProperties.java
@@ -0,0 +1,19 @@
+package cn.springcloud.gray.client.config.properties;
+
+import cn.springcloud.gray.communication.RetryableInformationClient;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@Setter
+@Getter
+@ConfigurationProperties("gray.server")
+public class GrayServerProperties {
+
+ private String url;
+ private boolean loadbalanced;
+ //在和灰度服务器通信时,如果交互失败,是否重试。
+ private boolean retryable = true;
+ //重试次数
+ private int retryNumberOfRetries = RetryableInformationClient.DEFAULT_NUMBER_OF_RETRIES;
+}
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 171324f7..8d8f44e8 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
@@ -15,6 +15,11 @@
import java.util.Optional;
import java.util.function.Consumer;
+/**
+ * 灰度事件监听器,处理灰度管控端发来的事件消息。
+ * 事件源分两种:灰度实例的,或灰度追踪的。
+ * 事件类型分两种:更新、删除
+ */
public class DefaultGrayEventListener implements GrayEventListener, InstanceLocalInfoAware {
private CommunicableGrayManager grayManager;
@@ -58,6 +63,10 @@ private DefaultGrayEventListener putHandler(SourceType sourceType, Consumer
spring-cloud-gray
cn.springcloud.gray
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-dependencies/pom.xml b/spring-cloud-gray-dependencies/pom.xml
index 24f2b676..4127be79 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
- 2.1.0
+ A.1.0.1
@@ -17,7 +17,7 @@
cn.springcloud.gray
spring-cloud-gray-dependencies
- 2.1.0
+ A.1.0.1
pom
diff --git a/spring-cloud-gray-samples/pom.xml b/spring-cloud-gray-samples/pom.xml
index 63664fdf..abed80b9 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
- 2.1.0
+ A.1.0.1
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 9e3d32c0..5ce4fb36 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
- 2.1.0
+ A.1.0.1
4.0.0
@@ -20,7 +20,7 @@
spring-cloud-gray-utils
cn.springcloud.gray
- 2.1.0
+ A.1.0.1
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 f02f4881..16ea7e64 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/main/resources/config/application.yml b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/main/resources/config/application.yml
index 48aaddc5..ac2a1c97 100644
--- a/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/main/resources/config/application.yml
+++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/main/resources/config/application.yml
@@ -35,7 +35,7 @@ spring:
# max-attempts: 1
GrayEventOutput:
destination: gray_event
- # rabbit:
+ # rabbit:
# bindings:
# GrayEventInput:
# consumer:
@@ -54,4 +54,7 @@ eureka:
gray:
server:
- evictionIntervalTimerInMs: 60000
\ No newline at end of file
+ evictionIntervalTimerInMs: 30000
+ instance:
+ eviction:
+ enabled: true
\ No newline at end of file
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
new file mode 100644
index 00000000..95080a0d
--- /dev/null
+++ b/spring-cloud-gray-samples/spring-cloud-gray-server-sample/src/test/java/cn/springcloud/gray/service/test/GrayInstanceRecordEvictionTest.java
@@ -0,0 +1,47 @@
+package cn.springcloud.gray.service.test;
+
+import cn.springcloud.gray.server.app.GrayServerApplication;
+import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
+import cn.springcloud.gray.server.module.GrayInstanceRecordEvictor;
+import cn.springcloud.gray.server.module.domain.GrayInstance;
+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;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+@ActiveProfiles({"dev"})
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GrayServerApplication.class)
+@Slf4j
+public class GrayInstanceRecordEvictionTest {
+
+ @Autowired
+ private GrayServerProperties grayServerProperties;
+ @Autowired
+ private GrayInstanceRecordEvictor grayInstanceRecordEvictor;
+ @Autowired
+ private GrayInstanceService grayInstanceService;
+
+ @Test
+ public void testEvictGrayInstance() {
+ GrayServerProperties.InstanceRecordEvictProperties evictProperties =
+ grayServerProperties.getInstance().getEviction();
+ List befores = grayInstanceService.findAllByEvictableRecords(
+ evictProperties.getLastUpdateDateExpireDays(), evictProperties.getEvictionInstanceStatus());
+
+ if (befores.size() > 0) {
+ grayInstanceRecordEvictor.evict();
+ List afters = grayInstanceService.findAllByEvictableRecords(
+ evictProperties.getLastUpdateDateExpireDays(), evictProperties.getEvictionInstanceStatus());
+ log.info("before:{}, after:{}", befores.size(), afters.size());
+ Assert.assertTrue("清理失败的灰度服务实例失败", afters.size() == 0);
+ }
+ }
+}
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 4ca66d02..90ebc021 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
@@ -2,6 +2,7 @@
import cn.springcloud.gray.model.GrayStatus;
+import cn.springcloud.gray.model.InstanceStatus;
import cn.springcloud.gray.server.app.GrayServerApplication;
import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
import cn.springcloud.gray.server.module.domain.GrayInstance;
@@ -16,6 +17,7 @@
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
+import java.util.Arrays;
import java.util.List;
@ActiveProfiles({"dev"})
@@ -36,8 +38,17 @@ public class GrayInstanceServiceTest {
@Test
public void test() throws JsonProcessingException {
List grayInstances = grayInstanceService.findAllByStatus(
- GrayStatus.OPEN, grayServerProperties.getNormalInstanceStatus());
+ GrayStatus.OPEN, grayServerProperties.getInstance().getNormalInstanceStatus());
log.info("{}", objectMapper.writeValueAsString(grayInstances));
}
+
+
+ @Test
+ public void testFindAllByEvictableRecords() throws JsonProcessingException {
+ List grayInstances = grayInstanceService.findAllByEvictableRecords(1,
+ Arrays.asList(InstanceStatus.DOWN, InstanceStatus.UNKNOWN));
+ System.out.println(objectMapper.writeValueAsString(grayInstances));
+ }
+
}
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 7d6a0317..a6a45458 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/ServiceAApplication.java b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/ServiceAApplication.java
index d392ee06..2138ef65 100644
--- a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/ServiceAApplication.java
+++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/ServiceAApplication.java
@@ -1,6 +1,5 @@
package cn.springcloud.service.a;
-import cn.springcloud.gray.client.EnableGrayClient;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -15,7 +14,6 @@
*/
@SpringBootApplication
@EnableDiscoveryClient
-@EnableGrayClient
public class ServiceAApplication {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(ServiceAApplication.class);
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/resources/config/application.yml b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/resources/config/application.yml
index 07621a45..8071640d 100644
--- a/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/resources/config/application.yml
+++ b/spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/resources/config/application.yml
@@ -14,7 +14,9 @@ eureka:
lease-renewal-interval-in-seconds: 10
lease-expiration-duration-in-seconds: 30
gray:
+ enabled: true
client:
instance:
- grayEnroll: true #是否在启动后自动注册成灰度实例
- serverUrl: http://localhost:20202 #灰度服务端的url
\ No newline at end of file
+ grayEnroll: false #是否在启动后自动注册成灰度实例
+ server:
+ url: http://localhost:20202 #灰度服务端的url
\ No newline at end of file
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 5972f88a..bcc3177f 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
- 2.1.0
+ A.1.0.1
4.0.0
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 ced10038..b924b76f 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
@@ -19,4 +19,5 @@ gray:
client:
instance:
grayEnroll: true #是否在启动后自动注册成灰度实例
- serverUrl: http://localhost:20202 #灰度服务端的url
\ No newline at end of file
+ server:
+ url: http://localhost:20202 #灰度服务端的url
\ No newline at end of file
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 347c01f1..120344df 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/ServiceBApplication.java b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/ServiceBApplication.java
index 842a0df2..961f1c3a 100644
--- a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/ServiceBApplication.java
+++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/ServiceBApplication.java
@@ -1,6 +1,5 @@
package cn.springcloud.gray.service.b;
-import cn.springcloud.gray.client.EnableGrayClient;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -16,7 +15,6 @@
*/
@SpringBootApplication
@EnableDiscoveryClient
-@EnableGrayClient
@EnableFeignClients
public class ServiceBApplication {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(ServiceBApplication.class);
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/RestTemplateConfiguration.java b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/RestTemplateConfiguration.java
new file mode 100644
index 00000000..5a7dbb33
--- /dev/null
+++ b/spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/RestTemplateConfiguration.java
@@ -0,0 +1,18 @@
+package cn.springcloud.gray.service.b.configuration;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ @LoadBalanced
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+}
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 8bd22265..edc5ca71 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
@@ -36,16 +36,17 @@ eureka:
defaultZone: http://localhost:20001/eureka/
instance:
instanceId: ${spring.application.name}:${server.port}
- lease-renewal-interval-in-seconds: 10
- lease-expiration-duration-in-seconds: 30
- initial-status: starting
+ lease-renewal-interval-in-seconds: 5
+ lease-expiration-duration-in-seconds: 15
+# initial-status: starting
feign:
hystrix:
enabled: true
gray:
- client:
- server-url: http://localhost:20202
+ enabled: true
+ server:
+ url: http://localhost:20202
request:
track:
web:
@@ -60,7 +61,7 @@ gray:
value: version,test
path-patterns: /*
load:
- enabled: true
+ enabled: false
gray-instances:
- serviceId: service-a
instance-id: service-a:20104
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 cc96b623..302907ba 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
- 2.1.0
+ A.1.0.1
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 dbf75869..0dc63e4e 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/GrayZuulApplication.java b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/GrayZuulApplication.java
index ff63148f..e2b9e7f4 100644
--- a/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/GrayZuulApplication.java
+++ b/spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/GrayZuulApplication.java
@@ -14,10 +14,10 @@
/**
* Created by saleson on 2017/10/18.
*/
+@EnableGrayClient
@SpringCloudApplication
@EnableZuulProxy
@EnableDiscoveryClient
-@EnableGrayClient
public class GrayZuulApplication {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(GrayZuulApplication.class);
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 8491329d..0d28bf8d 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
@@ -32,9 +32,9 @@ eureka:
serviceUrl:
defaultZone: http://localhost:20001/eureka/
instance:
- lease-renewal-interval-in-seconds: 10
- lease-expiration-duration-in-seconds: 30
- initial-status: starting
+ lease-renewal-interval-in-seconds: 5
+ lease-expiration-duration-in-seconds: 15
+# initial-status: starting
ribbon:
# ReadTimeout: 30000
@@ -49,8 +49,10 @@ zuul:
# path: /client/** #匹配/techouse/usersystem/** 均路由到cloud-client
# serviceId: eureka-client #指定路由到的serviceId
gray:
+ # enabled: true
+ server:
+ url: http://localhost:20202
client:
- server-url: http://localhost:20202
serviceUpdateIntervalTimerInMs: 0
request:
track:
diff --git a/spring-cloud-gray-server/pom.xml b/spring-cloud-gray-server/pom.xml
index a1af1066..00808586 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
- 2.1.0
+ A.1.0.1
4.0.0
@@ -13,6 +13,10 @@
+
+ cn.springcloud.gray
+ spring-cloud-gray-utils
+
cn.springcloud.gray
spring-cloud-gray-core
@@ -28,6 +32,11 @@
spring-boot-starter-test
provided
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
org.springframework.cloud
spring-cloud-starter-eureka
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 635f1da9..cc8af317 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
@@ -1,15 +1,33 @@
package cn.springcloud.gray.server;
+import cn.springcloud.gray.concurrent.DefaultThreadFactory;
+import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
import cn.springcloud.gray.server.manager.GrayServiceManager;
+import cn.springcloud.gray.server.module.GrayInstanceRecordEvictor;
+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 javax.annotation.PreDestroy;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
-public class GrayServerInitializingDestroyBean implements InitializingBean {
+@Slf4j
+public class GrayServerInitializingDestroyBean
+ implements InitializingBean, ApplicationContextAware {
private GrayServiceManager grayServiceManager;
+ private GrayServerProperties grayServerProperties;
+ private ScheduledExecutorService scheduledExecutorService =
+ new ScheduledThreadPoolExecutor(1, new DefaultThreadFactory("initDestory"));
+ private ApplicationContext appCxt;
- public GrayServerInitializingDestroyBean(GrayServiceManager grayServiceManager) {
+ public GrayServerInitializingDestroyBean(
+ GrayServiceManager grayServiceManager, GrayServerProperties grayServerProperties) {
this.grayServiceManager = grayServiceManager;
+ this.grayServerProperties = grayServerProperties;
}
@Override
@@ -17,14 +35,48 @@ public void afterPropertiesSet() {
initToWork();
}
-
private void initToWork() {
grayServiceManager.openForWork();
- }
+ // 初始化灰度实例的回收任务
+ initGrayInstanceRecordEvictionTask();
+ }
@PreDestroy
public void shutdown() {
grayServiceManager.shutdown();
+ scheduledExecutorService.shutdown();
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ appCxt = applicationContext;
+ }
+
+ private void initGrayInstanceRecordEvictionTask() {
+ GrayServerProperties.InstanceRecordEvictProperties evictProperties =
+ grayServerProperties.getInstance().getEviction();
+ if (!evictProperties.isEnabled()) {
+ return;
+ }
+ String beanName = "grayInstanceRecordEvictor";
+ GrayInstanceRecordEvictor instanceRecordEvictor =
+ getBean(beanName, GrayInstanceRecordEvictor.class);
+ if (instanceRecordEvictor == null) {
+ log.error("没有找到名为{}的GrayInstanceRecordEvictor类型或者为GrayInstanceRecordEvictor类型的实例", beanName);
+ throw new NullPointerException("没有找到GrayInstanceRecordEvictor类型的实例");
+ }
+ scheduledExecutorService.schedule(
+ () -> instanceRecordEvictor.evict(),
+ evictProperties.getEvictionIntervalTimerInMs(),
+ TimeUnit.MILLISECONDS);
+ }
+
+ private T getBean(String beanName, Class cls) {
+ T t = appCxt.getBean(beanName, cls);
+ if (t == null) {
+ t = appCxt.getBean(cls);
+ }
+ return t;
}
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/DBStorageConfiguration.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/DBStorageConfiguration.java
index 606cc5a5..7f147050 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/DBStorageConfiguration.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/DBStorageConfiguration.java
@@ -2,13 +2,17 @@
import cn.springcloud.gray.event.GrayEventPublisher;
import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
+import cn.springcloud.gray.server.module.GrayInstanceRecordEvictor;
import cn.springcloud.gray.server.module.GrayServerModule;
import cn.springcloud.gray.server.module.GrayServerTrackModule;
-import cn.springcloud.gray.server.module.SimpleGrayServerModule;
-import cn.springcloud.gray.server.module.SimpleGrayServerTrackModule;
+import cn.springcloud.gray.server.module.jpa.JPAGrayInstanceRecordEvictor;
+import cn.springcloud.gray.server.module.jpa.JPAGrayServerModule;
+import cn.springcloud.gray.server.module.jpa.JPAGrayServerTrackModule;
import cn.springcloud.gray.server.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@@ -39,7 +43,7 @@ public GrayServerModule grayServerModule(
GrayEventPublisher grayEventPublisher,
GrayServiceService grayServiceService, GrayInstanceService grayInstanceService,
GrayDecisionService grayDecisionService, GrayPolicyService grayPolicyService) {
- return new SimpleGrayServerModule(
+ return new JPAGrayServerModule(
grayServerProperties, grayEventPublisher, grayServiceService, grayInstanceService,
grayDecisionService, grayPolicyService);
}
@@ -47,11 +51,30 @@ public GrayServerModule grayServerModule(
@Bean
public GrayServerTrackModule grayServerTrackModule(GrayEventPublisher grayEventPublisher, GrayTrackService grayTrackService) {
- return new SimpleGrayServerTrackModule(grayEventPublisher, grayTrackService);
+ return new JPAGrayServerTrackModule(grayEventPublisher, grayTrackService);
}
}
+
+ @Configuration
+ @ConditionalOnProperty("gray.server.instance.eviction.enabled")
+ public static class JPAGrayInstanceRecordEvictionConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public GrayInstanceRecordEvictor grayInstanceRecordEvictor(
+ GrayInstanceService grayInstanceService, GrayServerProperties grayServerProperties) {
+ GrayServerProperties.InstanceRecordEvictProperties evictProperties =
+ grayServerProperties.getInstance().getEviction();
+ return new JPAGrayInstanceRecordEvictor(grayInstanceService,
+ evictProperties.getEvictionInstanceStatus(),
+ evictProperties.getLastUpdateDateExpireDays());
+ }
+
+
+ }
+
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/GrayServerAutoConfiguration.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/GrayServerAutoConfiguration.java
index be02b414..7b31a1a9 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/GrayServerAutoConfiguration.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/GrayServerAutoConfiguration.java
@@ -33,8 +33,6 @@ public class GrayServerAutoConfiguration {
@Autowired
private GrayServerProperties grayServerConfig;
- @Autowired
- private GrayServerModule grayServerModule;
@Bean
@ConditionalOnMissingBean
@@ -44,14 +42,15 @@ public RestTemplate restTemplate() {
@Bean
@ConditionalOnMissingBean
- public DefaultGrayServiceManager defaultGrayServiceManager(GrayServerEvictor grayServerEvictor) {
+ public DefaultGrayServiceManager defaultGrayServiceManager(
+ GrayServerEvictor grayServerEvictor, GrayServerModule grayServerModule) {
return new DefaultGrayServiceManager(grayServerConfig, grayServerModule, grayServerEvictor);
}
@Bean
public GrayServerInitializingDestroyBean grayServerInitializingBean(GrayServiceManager grayServiceManager) {
- return new GrayServerInitializingDestroyBean(grayServiceManager);
+ return new GrayServerInitializingDestroyBean(grayServiceManager, grayServerConfig);
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/properties/GrayServerProperties.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/properties/GrayServerProperties.java
index fb94759d..e6195c7e 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/properties/GrayServerProperties.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/configuration/properties/GrayServerProperties.java
@@ -8,16 +8,56 @@
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
@Setter
@Getter
@ConfigurationProperties(prefix = "gray.server")
public class GrayServerProperties {
- private int evictionIntervalTimerInMs = 60000;
+ private long evictionIntervalTimerInMs = TimeUnit.SECONDS.toMillis(60);
- private Set normalInstanceStatus =
- new HashSet<>(Arrays.asList(InstanceStatus.STARTING, InstanceStatus.UP));
+ private InstanceProperties instance = new InstanceProperties();
+ @Setter
+ @Getter
+ public static class InstanceProperties {
+ private Set normalInstanceStatus =
+ new HashSet<>(Arrays.asList(InstanceStatus.STARTING, InstanceStatus.UP));
+
+
+ private InstanceRecordEvictProperties eviction = new InstanceRecordEvictProperties();
+
+
+ }
+
+
+ /**
+ * 灰度实例的清理配置参数
+ */
+ @Setter
+ @Getter
+ public static class InstanceRecordEvictProperties {
+
+ private boolean enabled;
+
+ /**
+ * 定时执行的时间周期
+ */
+ private long evictionIntervalTimerInMs = TimeUnit.DAYS.toMillis(1l);
+
+
+ /**
+ * 将被清理的状态
+ */
+ private Set evictionInstanceStatus =
+ new HashSet<>(Arrays.asList(InstanceStatus.DOWN, InstanceStatus.UNKNOWN));
+
+
+ /**
+ * 最后更新时间过期天数
+ */
+ private int lastUpdateDateExpireDays = 1;
+ }
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayInstanceDO.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayInstanceDO.java
index 6e1c0bf3..94846810 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayInstanceDO.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayInstanceDO.java
@@ -3,6 +3,7 @@
import lombok.*;
import javax.persistence.*;
+import java.util.Date;
@Setter
@Getter
@@ -14,7 +15,6 @@
public class GrayInstanceDO {
@Id
@Column(length = 64)
- @GeneratedValue(strategy = GenerationType.IDENTITY)
private String instanceId;
@Column(length = 32)
private String serviceId;
@@ -22,6 +22,8 @@ public class GrayInstanceDO {
private String host;
@Column(length = 5)
private Integer port;
+ @Column
+ private Date lastUpdateDate;
/**
* 实例状态
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayServiceDO.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayServiceDO.java
index 12604d9e..9895cb13 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayServiceDO.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/model/GrayServiceDO.java
@@ -2,7 +2,10 @@
import lombok.*;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
@Setter
@@ -16,7 +19,6 @@ public class GrayServiceDO {
@Id
@Column(length = 32)
- @GeneratedValue(strategy = GenerationType.IDENTITY)
private String serviceId;
@Column(length = 64)
private String serviceName;
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/repository/GrayInstanceRepository.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/repository/GrayInstanceRepository.java
index dfbbf371..2e0381af 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/repository/GrayInstanceRepository.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/dao/repository/GrayInstanceRepository.java
@@ -6,6 +6,7 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
+import java.util.Date;
import java.util.List;
@Repository
@@ -21,4 +22,7 @@ public interface GrayInstanceRepository extends JpaRepository findAllByServiceIdAndInstanceStatusIn(String serviceId, String[] instanceStatus);
List findAllByGrayStatusAndInstanceStatusIn(String grayStatus, String[] instanceStatus);
+
+
+ List findAllByLastUpdateDateBeforeAndInstanceStatusIn(Date lastUpdateDate, String[] instanceStatus);
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/evictor/DefaultGrayServiceEvictor.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/evictor/DefaultGrayServiceEvictor.java
index cd388d9b..85d37299 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/evictor/DefaultGrayServiceEvictor.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/evictor/DefaultGrayServiceEvictor.java
@@ -49,7 +49,7 @@ private void updateInstanceStatus(GrayServerModule grayServerModule, GrayInstanc
private void downAllInstance(GrayServerModule grayServerModule, GrayService grayService) {
List grayInstances =
grayServerModule.listGrayInstancesByServiceId(grayService.getServiceId(),
- grayServerProperties.getNormalInstanceStatus());
+ grayServerProperties.getInstance().getNormalInstanceStatus());
grayInstances.forEach(i -> grayServerModule.instanceShutdown(i.getInstanceId()));
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/manager/DefaultGrayServiceManager.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/manager/DefaultGrayServiceManager.java
index 0ef3f279..cb884960 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/manager/DefaultGrayServiceManager.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/manager/DefaultGrayServiceManager.java
@@ -34,7 +34,7 @@ public GrayServerModule getGrayServerModule() {
@Override
public void openForWork() {
- int times = grayServerProperties.getEvictionIntervalTimerInMs();
+ long times = grayServerProperties.getEvictionIntervalTimerInMs();
if (times > 0) {
evictionTimer.schedule(new EvictionTask(), times, times);
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayInstanceRecordEvictor.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayInstanceRecordEvictor.java
new file mode 100644
index 00000000..7ccfbf43
--- /dev/null
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayInstanceRecordEvictor.java
@@ -0,0 +1,12 @@
+package cn.springcloud.gray.server.module;
+
+
+/**
+ *
+ */
+public interface GrayInstanceRecordEvictor {
+
+
+ void evict();
+
+}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayServerModule.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayServerModule.java
index 2e025df5..a1592e56 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayServerModule.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/GrayServerModule.java
@@ -44,6 +44,8 @@ default void openGray(String instanceId) {
void updateInstanceStatus(String instanceId, InstanceStatus instanceStatus);
+ void updateInstanceStatus(GrayInstance instance, InstanceStatus instanceStatus);
+
void deleteGrayInstance(String intanceId);
void saveGrayPolicy(GrayPolicy grayPolicy);
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayModule.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayModule.java
index 155ad334..176344fe 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayModule.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayModule.java
@@ -78,7 +78,8 @@ private GrayTrackDefinition ofGrayTrack(GrayTrack grayTrack) {
@Override
public List allOpenInstances() {
List instances =
- grayServerModule.listGrayInstancesByNormalInstanceStatus(grayServerProperties.getNormalInstanceStatus());
+ grayServerModule.listGrayInstancesByNormalInstanceStatus(
+ grayServerProperties.getInstance().getNormalInstanceStatus());
List grayInstances = new ArrayList<>(instances.size());
instances.forEach(instance -> {
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/domain/GrayInstance.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/domain/GrayInstance.java
index ccfd9f49..130c0716 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/domain/GrayInstance.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/domain/GrayInstance.java
@@ -6,6 +6,8 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
+import java.util.Date;
+
@ApiModel("实例的灰度信息")
@Setter
@@ -23,6 +25,8 @@ public class GrayInstance {
private String host;
@ApiModelProperty("服务实例端口")
private Integer port;
+ @ApiModelProperty("最后更新时间")
+ private Date lastUpdateDate;
/**
* 实例状态
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayInstanceRecordEvictor.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayInstanceRecordEvictor.java
new file mode 100644
index 00000000..baf475f3
--- /dev/null
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayInstanceRecordEvictor.java
@@ -0,0 +1,41 @@
+package cn.springcloud.gray.server.module.jpa;
+
+import cn.springcloud.gray.model.InstanceStatus;
+import cn.springcloud.gray.server.module.GrayInstanceRecordEvictor;
+import cn.springcloud.gray.server.module.domain.GrayInstance;
+import cn.springcloud.gray.server.service.GrayInstanceService;
+
+import java.util.List;
+import java.util.Set;
+
+public class JPAGrayInstanceRecordEvictor implements GrayInstanceRecordEvictor {
+
+ private GrayInstanceService grayInstanceService;
+ /**
+ * 将被清理的状态
+ */
+ private Set evictionInstanceStatus;
+
+
+ /**
+ * 最后更新时间过期天数
+ */
+ private int lastUpdateDateExpireDays;
+
+
+ public JPAGrayInstanceRecordEvictor(
+ GrayInstanceService grayInstanceService,
+ Set evictionInstanceStatus,
+ int lastUpdateDateExpireDays) {
+ this.grayInstanceService = grayInstanceService;
+ this.evictionInstanceStatus = evictionInstanceStatus;
+ this.lastUpdateDateExpireDays = lastUpdateDateExpireDays;
+ }
+
+ @Override
+ public void evict() {
+ List grayInstances =
+ grayInstanceService.findAllByEvictableRecords(lastUpdateDateExpireDays, evictionInstanceStatus);
+ grayInstances.forEach(grayInstance -> grayInstanceService.deleteReactById(grayInstance.getInstanceId()));
+ }
+}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerModule.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerModule.java
similarity index 94%
rename from spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerModule.java
rename to spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerModule.java
index ea9b46a5..ac258f88 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerModule.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerModule.java
@@ -1,4 +1,4 @@
-package cn.springcloud.gray.server.module;
+package cn.springcloud.gray.server.module.jpa;
import cn.springcloud.gray.event.EventType;
import cn.springcloud.gray.event.GrayEventMsg;
@@ -7,6 +7,7 @@
import cn.springcloud.gray.model.GrayStatus;
import cn.springcloud.gray.model.InstanceStatus;
import cn.springcloud.gray.server.configuration.properties.GrayServerProperties;
+import cn.springcloud.gray.server.module.GrayServerModule;
import cn.springcloud.gray.server.module.domain.GrayDecision;
import cn.springcloud.gray.server.module.domain.GrayInstance;
import cn.springcloud.gray.server.module.domain.GrayPolicy;
@@ -24,7 +25,7 @@
import java.util.Objects;
@Slf4j
-public class SimpleGrayServerModule implements GrayServerModule {
+public class JPAGrayServerModule implements GrayServerModule {
private GrayServiceService grayServiceService;
private GrayInstanceService grayInstanceService;
@@ -33,7 +34,7 @@ public class SimpleGrayServerModule implements GrayServerModule {
private GrayEventPublisher grayEventPublisher;
private GrayServerProperties grayServerProperties;
- public SimpleGrayServerModule(
+ public JPAGrayServerModule(
GrayServerProperties grayServerProperties, GrayEventPublisher grayEventPublisher,
GrayServiceService grayServiceService,
GrayInstanceService grayInstanceService,
@@ -94,11 +95,16 @@ public void saveGrayInstance(GrayInstance instance) {
@Override
public void updateInstanceStatus(String instanceId, InstanceStatus instanceStatus) {
GrayInstance instance = grayInstanceService.findOneModel(instanceId);
+ updateInstanceStatus(instance, instanceStatus);
+ }
+
+ @Override
+ public void updateInstanceStatus(GrayInstance instance, InstanceStatus instanceStatus) {
if (instance != null && !Objects.equals(instance.getInstanceStatus(), instanceStatus)) {
instance.setInstanceStatus(instanceStatus);
grayInstanceService.saveModel(instance);
if (instance.getGrayStatus() == GrayStatus.OPEN) {
- if (grayServerProperties.getNormalInstanceStatus().contains(instanceStatus)) {
+ if (grayServerProperties.getInstance().getNormalInstanceStatus().contains(instanceStatus)) {
publishUpdateIntanceEvent(instance);
} else {
publishDownIntanceEvent(instance);
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerTrackModule.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerTrackModule.java
similarity index 91%
rename from spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerTrackModule.java
rename to spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerTrackModule.java
index 4e827c73..7f9af8d6 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/SimpleGrayServerTrackModule.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/module/jpa/JPAGrayServerTrackModule.java
@@ -1,10 +1,11 @@
-package cn.springcloud.gray.server.module;
+package cn.springcloud.gray.server.module.jpa;
import cn.springcloud.gray.event.EventType;
import cn.springcloud.gray.event.GrayEventMsg;
import cn.springcloud.gray.event.GrayEventPublisher;
import cn.springcloud.gray.event.SourceType;
import cn.springcloud.gray.model.GrayTrackDefinition;
+import cn.springcloud.gray.server.module.GrayServerTrackModule;
import cn.springcloud.gray.server.module.domain.GrayTrack;
import cn.springcloud.gray.server.service.GrayTrackService;
import org.apache.commons.lang.StringUtils;
@@ -13,12 +14,12 @@
import java.util.List;
-public class SimpleGrayServerTrackModule implements GrayServerTrackModule {
+public class JPAGrayServerTrackModule implements GrayServerTrackModule {
private GrayEventPublisher grayEventPublisher;
private GrayTrackService grayTrackService;
- public SimpleGrayServerTrackModule(GrayEventPublisher grayEventPublisher, GrayTrackService grayTrackService) {
+ public JPAGrayServerTrackModule(GrayEventPublisher grayEventPublisher, GrayTrackService grayTrackService) {
this.grayEventPublisher = grayEventPublisher;
this.grayTrackService = grayTrackService;
}
diff --git a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/service/GrayInstanceService.java b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/service/GrayInstanceService.java
index 872536d6..52acbcaa 100644
--- a/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/service/GrayInstanceService.java
+++ b/spring-cloud-gray-server/src/main/java/cn/springcloud/gray/server/service/GrayInstanceService.java
@@ -14,7 +14,10 @@
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
import java.util.Collection;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -60,6 +63,12 @@ public void deleteReactById(String id) {
});
}
+ @Override
+ public void saveModel(GrayInstance grayInstance) {
+ grayInstance.setLastUpdateDate(new Date());
+ super.saveModel(grayInstance);
+ }
+
public List findAllByStatus(GrayStatus grayStatus, Collection instanceStatusList) {
String[] instanceStatusAry = toArray(instanceStatusList);
return grayInstanceMapper.dos2models(
@@ -90,4 +99,16 @@ private String[] toArray(Collection instanceStatusList) {
.collect(Collectors.toList())
.toArray(new String[instanceStatusList.size()]);
}
+
+ public List findAllByEvictableRecords(
+ int lastUpdateDateExpireDays, Collection evictionInstanceStatus) {
+ Date lastUpdateDate = Date.from(
+ LocalDateTime
+ .now()
+ .minusDays(lastUpdateDateExpireDays)
+ .atZone(ZoneId.systemDefault())
+ .toInstant());
+ String[] instanceStatusAry = toArray(evictionInstanceStatus);
+ return dos2models(repository.findAllByLastUpdateDateBeforeAndInstanceStatusIn(lastUpdateDate, instanceStatusAry));
+ }
}
diff --git a/spring-cloud-gray-starter-dependencies/pom.xml b/spring-cloud-gray-starter-dependencies/pom.xml
index a9fb6975..37088201 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-utils/pom.xml b/spring-cloud-gray-utils/pom.xml
index c57924e2..0e81065b 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-gray-utils/src/main/java/cn/springcloud/gray/concurrent/DefaultThreadFactory.java b/spring-cloud-gray-utils/src/main/java/cn/springcloud/gray/concurrent/DefaultThreadFactory.java
new file mode 100644
index 00000000..466e21e8
--- /dev/null
+++ b/spring-cloud-gray-utils/src/main/java/cn/springcloud/gray/concurrent/DefaultThreadFactory.java
@@ -0,0 +1,28 @@
+package cn.springcloud.gray.concurrent;
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class DefaultThreadFactory implements ThreadFactory {
+
+ private static final AtomicInteger poolNumber = new AtomicInteger(1);
+ private final ThreadGroup group;
+ private final AtomicInteger threadNumber = new AtomicInteger(1);
+ private final String namePrefix;
+
+ public DefaultThreadFactory(String threadPrefix) {
+ SecurityManager s = System.getSecurityManager();
+ group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup();
+ namePrefix = threadPrefix + "-" + poolNumber.getAndIncrement() + "-thread-";
+ }
+
+ public Thread newThread(Runnable r) {
+ Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
+ if (t.isDaemon())
+ t.setDaemon(false);
+ if (t.getPriority() != Thread.NORM_PRIORITY)
+ t.setPriority(Thread.NORM_PRIORITY);
+ return t;
+ }
+
+}
\ No newline at end of file
diff --git a/spring-cloud-gray-webui/pom.xml b/spring-cloud-gray-webui/pom.xml
index a16291d1..a0fa3783 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-starter-gray-client/pom.xml b/spring-cloud-starter-gray-client/pom.xml
index 823d6925..2aabd7e5 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
- 2.1.0
+ A.1.0.1
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 a8ec7ac3..0b2ea614 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
@@ -1,8 +1,9 @@
# Auto Configure
+#cn.springcloud.gray.client.EnableGrayClient=\
+# cn.springcloud.gray.client.config.GrayClientImportSelector
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.springcloud.gray.client.config.GrayClientAutoConfiguration,\
cn.springcloud.gray.client.config.GrayClientWebConfiguration,\
- cn.springcloud.gray.client.config.GrayLoadAutoConfigration,\
cn.springcloud.gray.client.netflix.configuration.NetflixGrayAutoConfiguration,\
cn.springcloud.gray.client.netflix.configuration.GrayClientEurekaAutoConfiguration,\
cn.springcloud.gray.client.netflix.feign.configuration.GrayFeignAutoConfiguration,\
diff --git a/spring-cloud-starter-gray-eureka-server/pom.xml b/spring-cloud-starter-gray-eureka-server/pom.xml
index 16fd2a23..89e0294e 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
- 2.1.0
+ A.1.0.1
4.0.0
diff --git a/spring-cloud-starter-gray-eureka-server/src/main/java/cn/springcloud/gray/eureka/server/listener/EurekaInstanceListener.java b/spring-cloud-starter-gray-eureka-server/src/main/java/cn/springcloud/gray/eureka/server/listener/EurekaInstanceListener.java
index d17926fa..69fd65b5 100644
--- a/spring-cloud-starter-gray-eureka-server/src/main/java/cn/springcloud/gray/eureka/server/listener/EurekaInstanceListener.java
+++ b/spring-cloud-starter-gray-eureka-server/src/main/java/cn/springcloud/gray/eureka/server/listener/EurekaInstanceListener.java
@@ -34,7 +34,8 @@ public void listenDown(EurekaInstanceCanceledEvent event) {
InstanceRegistry registry = (InstanceRegistry) event.getSource();
com.netflix.appinfo.InstanceInfo instanceInfo =
registry.getApplication(event.getAppName()).getByInstanceId(event.getServerId());
- sendNotice(instanceInfo, InstanceStatus.DOWN, "DOWN");
+ InstanceStatus instanceStatus = EurekaInstatnceTransformer.toGrayInstanceStatus(instanceInfo.getStatus());
+ sendNotice(instanceInfo, instanceStatus, "DOWN");
}
@@ -46,7 +47,8 @@ public void listenDown(EurekaInstanceCanceledEvent event) {
@EventListener
public void listenRenew(EurekaInstanceRenewedEvent event) {
com.netflix.appinfo.InstanceInfo instanceInfo = event.getInstanceInfo();
- sendNotice(instanceInfo, InstanceStatus.UP, "REGISTERED");
+ InstanceStatus instanceStatus = EurekaInstatnceTransformer.toGrayInstanceStatus(instanceInfo.getStatus());
+ sendNotice(instanceInfo, instanceStatus, "RENEW");
}
diff --git a/spring-cloud-starter-gray-server/pom.xml b/spring-cloud-starter-gray-server/pom.xml
index 95b5f717..cb555238 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
- 2.1.0
+ A.1.0.1
4.0.0